我在两个不同的时间从某个来源获取数据作为哈希值。我需要知道两个哈希是否相同。我不需要知道哪些键值对不同。
我正在考虑在某个地方(例如数据库)使用 Digest::MD5 模块存储哈希的 md5sum,然后比较下一个接收到的哈希的 md5sum 是否与之前存储的 md5sum 相同。如果不相同,则散列中的数据不同。
我的哈希大小不是很大,单个哈希中最多 50 个键。perl 中还有其他更好更快的方法吗?
对于这么小的数据集,没有必要过度优化事物。
您可以使用数据::比较:
use Data::Compare;
print 'structures of \%h and \%v are ',
Compare(\%h, \%v) ? "" : "not ", "identical.\n";
我假设这两个哈希变量在不同的进程中。
不保证哈希(例如 md5sums)对于两个不同的文本是唯一的。您需要进行全文比较才能确定。
如果您要比较大型集合的成员,散列很有用,因为它减少了您需要进行全文比较的次数。如果您只有两个字符串要比较,那只是浪费时间。
当然,如果罕见的误报不是问题,那么使用散列将节省存储空间。