如何合并两个列表而不使用传统的每个列表

问题描述:

我想合并两个列表。一个是活动记录列表,另一个是简单列表。如何合并两个列表而不使用传统的每个列表

每个对象在合并后都会得到weight属性。

我该如何以更优雅的方式做到这一点。

a_list = [ 
    {name: "Jack", age: 19}, 
    {name: "Mark", age: 29}, 
] 

weights = [ 38, 19 
] 

a_list.join(b_list) = [ 
    {name: "Jack", age: 19, weight: 38}, 
    {name: "Mark", age: 29, weight: 19}, 

] 

传统方法

weights.each_with_index do |value, i| 
    a_list[i]["weight"] = value 
end 
+0

第一个列表是一个哈希数组。在您发布的示例中没有看到ActiveRecord对象。 –

做你的 “传统方法” 的作用:

weights.zip(a_list).zip{|value, h| h["weight"] = value} 

为了让你在它上面的代码有作为a_list.join(b_list)

weights.zip(a_list).zip{|value, h| h[:weight] = value} 

a_list.map.with_index { |x, i| x.merge(weight: weights[i]) } 
# => [{:name=>"Jack", :age=>19, :weight=>38}, {:name=>"Mark", :age=>29, :weight=>19}]