GNU bug report logs -
#63671
Add function to test equality of hash tables
Previous Next
Full log
Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
Hello!
Would y'all be open to adding something like this?
(defun hash-equal (hash1 hash2)
"Return non-nil when the contents of HASH1 and HASH2 are equal.
Table values are compared using `equal' unless they are both hash
tables themselves, in which case `hash-equal' is used.
Does not compare equality predicates."
(and (= (hash-table-count hash1)
(hash-table-count hash2))
(catch 'flag (maphash (lambda (key hash1-value)
(let ((hash2-value (gethash key hash2)))
(or (if (and (hash-table-p hash1-value)
(hash-table-p hash2-value))
(hash-equal hash1-value hash2-value)
(equal hash1-value hash2-value))
(throw 'flag nil))))
hash1)
t)))
Rudimentary test:
(let ((hash1 (make-hash-table))
(hash2 (make-hash-table))
(hash3 (make-hash-table))
(hash4 (make-hash-table)))
(puthash 'foo "foo" hash1)
(puthash 'foo "foo" hash2)
(puthash 'bar "foo" hash3)
(puthash 'bar "foo" hash4)
(puthash 'baz hash3 hash1)
(puthash 'baz hash4 hash2)
(hash-equal hash1 hash2))
We could use hash-table-test to compare predicates, perhaps
dependent on the presence of a 'compare-tests flag?
Best,
Joseph
This bug report was last modified 1 year and 314 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.