0

我有三个数组数组。我基本上需要将它们放在一起。

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]]

我查看了产品方法,希望能有所帮助,但不行。我也尝试过遍历所有三个,但我想我没那么聪明。

4

3 回答 3

7

组合它们,然后对它们进行分组,然后将它们映射到适合您的规格:

(first + second + third).group_by(&:first).map { |k, v| [k, *v.map(&:last)] }
于 2012-10-20T00:52:38.083 回答
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
于 2012-10-20T00:17:30.060 回答
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]
于 2012-10-20T00:39:38.193 回答