【发布时间】:2014-02-19 13:54:02
【问题描述】:
如果某些键匹配,我想将一个哈希数组与另一个合并。例如,我有这个:
data = [{"a"=>1, "b"=>2, "c"=>3}, {"a"=>1, "b"=>5, "c"=>7}]
new_data = [{"a"=>1, "b"=>2, "z"=>10}]
运行一些方法,像这样:
merge_with_validation(data, new_data, ["a","b"])
我希望结果是这样的:
[{"a"=>1, "b"=>2, "c"=>3, "z"=>10}, {"a"=>1, "b"=>5, "c"=>7, "z"=>nil}]
所以当键 a 和 b 中的值匹配时,结果是 data 与 new_data 合并。
答案更新
我使用 Arup Rakshit 的回答做了一点改动:
def merge_with_validation(data, new_data, keys)
data.map do |hash|
if hash.values_at(*keys) == new_data.first.values_at(*keys)
next hash.merge(new_data.shift)
end
hash
end
end
【问题讨论】:
-
问题不清楚,key
a的值怎么计算为2?到目前为止,您还尝试过什么? -
最重要的是,您的预期结果的第二种形式无效。
-
最重要的是,
merge是对哈希的操作,而不是对数组的操作。你的最后一句话没有意义。 -
修正了预期结果
-
new_data中可以有多个哈希值吗?