从另一个哈希表创建一个哈希。

4
英译中:

我目前正在处理两个包含公共值的不同哈希,我希望对哈希键名进行规范化。

哈希#1看起来像这样:

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

Hash #2看起来像:
files = [{ "file" => "file.txt", "dir" => "/folder/file.txt" }]

有没有一种方法可以循环遍历哈希表 #2 并创建一个新的哈希表,使键名变为“filename”和“path”,而不是“file”和“dir”?

你只是想改变键的值吗?还是你也想要这个值? - Manjunath Manoharan
2个回答

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))


0

试试这个:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接