我目前正在使用两个包含公共值的不同哈希,我想规范化哈希键名。
哈希 #1 看起来像:
files = [{ "filename" => "file.txt","path" => "/folder/file.txt" }]
虽然哈希 #2 看起来像:
files = [{ "file" => "file.txt", "dir" => "/folder/file.txt" }]
有没有办法遍历哈希 #2 并创建一个新的哈希,所以键是“文件名”和“路径”而不是“文件”和“目录”?
我目前正在使用两个包含公共值的不同哈希,我想规范化哈希键名。
哈希 #1 看起来像:
files = [{ "filename" => "file.txt","path" => "/folder/file.txt" }]
虽然哈希 #2 看起来像:
files = [{ "file" => "file.txt", "dir" => "/folder/file.txt" }]
有没有办法遍历哈希 #2 并创建一个新的哈希,所以键是“文件名”和“路径”而不是“文件”和“目录”?
只需用新密钥替换您的密钥:
files["path"] = files.delete("dir")
delete返回删除的值,因此您有效地将at移动files['dir']到files['path'].
Ruby 中没有神奇的方法可以为您的两个数组自动执行此过程;您必须遍历第一个,在第二个中找到值,然后执行上述delete操作:
files1.each do |key,value|
if old_key = files2.key(value)
files2[key] = files2.delete(old_key)
end
end
如果键已经在第二个数组中,这有可能覆盖值。如果您确定 in 中的每个值files1也在 in 中files2,则可以跳过 if 语句并简单地files2[key] = files2.delete(files2.find(value))在循环内使用。
尝试这个:
files1.concat(files2.map { |old_hash|
{
"filename" => old_hash["file"],
"path" => old_hash["dir"]
}
})