我正在编写一个程序,它将扫描一个目录,获取文件中行的校验和,并将其与某个数据库进行比较,返回匹配的条目。Ruby - 从修改后的值重建哈希
我的数据库是一个包含文件名的JSON文件和其生产线的校验和,它看起来像这样:
"HASHES": {
"file_name": {
"1": "checksum",
"2": "checksum"
},
"file_name": {
"1": "checksum",
"2": "checksum
},
etc..
}
我然后扫描目录,并建立一个类似的散列(即FILE_NAME的哈希值,行号,校验和)。此代码有效。
我从结果
这重建类似的散列的问题是我的代码有:
def compare(dir_hash, database_hash)
temp_hash = database_hash.dup
# retrieve the checksums from the dir_hash.
dir_values = dir_hash["HASHES"].sort_by(&:first).map { |x| x.last.values }
# retrieve the checksums from database_hash
db_values = database_hash["HASHES"].sort_by(&:first).map { |x| x.last.values }
# perform a set intersection to get the common values
unique_values = dir_values.zip(db_values).map { |x| x.reduce(:&) }
# code to reconstruct hash, based on new values
new_hash = temp_hash["HASHES"]
end
我似乎无法弄清楚如何与修改后的重建哈希值。
帮助赞赏。
注意
的sort_by(&:first)
的目的是为了确保当我们执行交集,我们都在同一个值执行它,换句话说,我把文件x
的交集从的目录和相同的文件x
从数据库(由于这样的事实,红宝石不保留密钥的顺序)
由于sort_by
将返回一个阵列,所述第一元件将是FILE_NAME,和第二元件将是行号散列,校验和
您可以为dir_hash和database_hash添加一个示例输入,并且您希望重构的哈希值和修改后的值看起来像他们吗? – Sid
那么你需要两个哈希的交集,对吧?键和值? – jazzytomato
@Sid database_hash和dir_hash看起来像我在我的问题中的散列。只有真实的信息。从本质上讲,JSON文件(数据库)看起来像问题中的散列,当我扫描目录时,我创建了一个看起来相同的散列(即'filename => {:1 =>:checkusm,:2 =>:checksum ,:3 =>:checksum}}'唯一的区别是值(i。e文件名和校验和) – user2840647