这是Ruby中的代码。我只是想简化它。你有什么想法吗?
def foo
points = some_collection.map { |item| {:key1 => item.key1, :key2 => item.key2, :key3 => item.key3, :key4=> item.key4} }
some_collection2.each do |item2|
points << {:key1 => item2.key1, :key2 => item2.key2, :key3 => item2.key3, :key4=> item2.key4}
end
points
end
答案 0 :(得分:2)
我会将两个集合的转换结果存储到两个数组中,然后将它们一起添加。
def foo
a1 = some_collection.map do |item|
{:key1 => item.method1, :key2 => item.method2, :key3 => item.key4, :key5=> item.key5}
end
a2 = some_collection2.map do |item|
{:key1 => item.method1, :key2 => item.method2, :key3 => item.key4, :key5=> item.key5}
end
a1 + a2
end
或者,如果你愿意,它甚至可以成为这个
def foo
some_collection.map do |item|
{:key1 => item.method1, :key2 => item.method2, :key3 => item.key4, :key5=> item.key5}
end + some_collection2.map do |item2|
{:key1 => item.method1, :key2 => item.method2, :key3 => item.key4, :key5=> item.key5}
end
end
答案 1 :(得分:2)
如果我理解正确,那么两个集合的映射函数都是相同的。
points = (some_collection + some_collection2).map do |item|
{:key1 => item.method1, :key2 => item.method2, :key3 => item.key4, :key5=> item.key5}
end
答案 2 :(得分:1)
您甚至可以在单独的数组中提取键列表,因此您将拥有:
keys = [:key1, :key2, :key3, :key4]
points = (some_collection + some_collection2).map do |item|
Hash[keys.map{|key| [key, item.send(key)]}]
end