2016-02-26 41 views
-1

我想合併兩個列表。一個是活動記錄列表,另一個是簡單列表。如何合併兩個列表而不使用傳統的每個列表

每個對象在合併後都會得到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對象。 –

回答

2

做你的 「傳統方法」 的作用:

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