我有三个数组。我基本上需要把它们叠在一起。
first = [[111, 1], [222, 2], [333, 3]]
second = [[111, 4], [222, 5], [333, 6]]
third = [[111,7], [222, 8], [333, 9]]
理想情况下,如果最终数组看起来像这样会很棒:
final = [[111, 1, 4, 7], [222, 2, 5, 8], [333, 3, 6, 9]]
我看了一下产品方法,希望这可能有所帮助,但不会。我也试图遍历所有三个,但我想我并不那么聪明。
答案 0 :(得分:7)
Combine他们,然后group他们,然后map他们符合您的规范:
(first + second + third).group_by(&:first).map { |k, v| [k, *v.map(&:last)] }
答案 1 :(得分:1)
[first,second,third].transpose.map do |array|
array.reduce { |init,e| init << e.last }
end
=> [[111, 1, 4, 7], [222, 2, 5, 8], [333, 3, 6, 9]]
处理数组中的几个最后元素:
[first,second,third].transpose.map do |array|
array.reduce { |init,e| init + e.drop(1) }
end
答案 2 :(得分:1)
不确定这是否有效,但我是在手机上完成的......所以肯定有更好的方法来实现它
first = [[111, 1], [222, 2], [333, 3]]
second = [[111, 4], [222, 5], [333, 6]]
third = [[111,7], [222, 8], [333, 9]]
all = [first, second, third]
hash = {}
all.each do |arr|
arr.each do |elem|
hash[elem[0]] ||= []
hash[elem[0]] << elem[1]
end
end
Array.new hash.map { |k,v| [k, *v]}
获取更多元素
hash[elem[0]].concat elem[1..-1]