从另一个哈希创建哈希

时间:2012-10-25 04:10:09

标签: ruby-on-rails ruby

我目前正在处理包含常用值的两个不同的哈希值,我想规范化哈希键名称。

Hash#1看起来像:

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

虽然Hash#2看起来像:

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

有没有办法循环散列#2并创建一个新的散列,所以键是“filename”和“path”而不是“file”和“dir”?

2 个答案:

答案 0 :(得分:7)

只需用新密钥替换密钥:

files["path"] = files.delete("dir")

delete会返回已删除的值,因此您可以有效地将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

如果已在第二个数组中获取了键,则可能会覆盖值。如果您确定files1中的每个值都在files2中,则可以跳过if语句,只需在循环中使用files2[key] = files2.delete(files2.find(value))

答案 1 :(得分:0)

试试这个:

files1.concat(files2.map { |old_hash| 
    { 
        "filename" => old_hash["file"], 
        "path" => old_hash["dir"]
    }
})