寻找一种以特殊方式合并两个哈希数组的优雅方法:
new_data = [{"name" => "a"}, {"name" => "b"}, {"name" => "c"}]
old_data = [{"name" => "a", "data" => "extra1"}, {"name" => "d", "data2" => "extra"}]
result = [{"name" => "a", "data" => "extra1"}, {"name" => "b"}, {"name" => "c"}]
Run Code Online (Sandbox Code Playgroud)
结果必须具有所有名称哈希值,new_data只有old_data名称键匹配的额外数据.
我的第一次尝试是这个,但它创建了一个额外的哈希:
def combine(new_data, old_data)
int = []
new_data.each do |s|
old_data.each do |e|
(int << (s.merge e)) if e["name"] == s["name"]
end
int << s
end
int
end
# => [{"name"=>"a", "data"=>"extra1"}, {"name"=>"a"}, {"name"=>"b"}, {"name"=>"c"}]
Run Code Online (Sandbox Code Playgroud)
一个单行,但在大型集合上可能不太高效.
new_data.map{ |e| e.merge(old_data.detect{ |e2| e2['name'] == e['name'] } || {}) }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48 次 |
| 最近记录: |