如何合并两个列表而不使用传统的每个列表
问题描述:
我想合并两个列表。一个是活动记录列表,另一个是简单列表。如何合并两个列表而不使用传统的每个列表
每个对象在合并后都会得到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
答
做你的 “传统方法” 的作用:
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}]
第一个列表是一个哈希数组。在您发布的示例中没有看到ActiveRecord对象。 –