从另一个哈希创建哈希

eri*_*lli 4 ruby ruby-on-rails

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

哈希#1看起来像:

files = [{ "filename" => "file.txt","path" => "/folder/file.txt" }]
Run Code Online (Sandbox Code Playgroud)

Hash#2看起来像:

files = [{ "file" => "file.txt", "dir" => "/folder/file.txt" }]
Run Code Online (Sandbox Code Playgroud)

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

mea*_*gar 7

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

files["path"] = files.delete("dir")
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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