[英]Creating a hash from another hash
我目前正在处理包含常见值的两个不同的哈希,我想规范化哈希键名称。
哈希#1看起来像:
files = [{ "filename" => "file.txt","path" => "/folder/file.txt" }]
Hash#2看起来像:
files = [{ "file" => "file.txt", "dir" => "/folder/file.txt" }]
有没有办法循环哈希#2并创建一个新的哈希,所以键是“文件名”和“路径”而不是“文件”和“目录”?
只需用新密钥替换您的密钥:
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))
。
试试这个:
files1.concat(files2.map { |old_hash|
{
"filename" => old_hash["file"],
"path" => old_hash["dir"]
}
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.