4

我目前正在使用两个包含公共值的不同哈希,我想规范化哈希键名。

哈希 #1 看起来像:

files = [{ "filename" => "file.txt","path" => "/folder/file.txt" }]

虽然哈希 #2 看起来像:

files = [{ "file" => "file.txt", "dir" => "/folder/file.txt" }]

有没有办法遍历哈希 #2 并创建一个新的哈希,所以键是“文件名”和“路径”而不是“文件”和“目录”?

4

2 回答 2

7

只需用新密钥替换您的密钥:

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))在循环内使用。

于 2012-10-25T04:11:07.407 回答
0

尝试这个:

files1.concat(files2.map { |old_hash| 
    { 
        "filename" => old_hash["file"], 
        "path" => old_hash["dir"]
    }
})
于 2012-10-25T04:41:35.990 回答