以下数组包含两个数组,每个数组有5个整数值:
[[1,2,3,4,5],[6,7,8,9,10]]
我希望以这样的方式组合它们,即通过将索引0,1 ...的数值组合到4来生成五个不同的数组。
输出应该是这样的:
[[1,6],[2,7],[3,8],[4,9],[5,10]]
有没有最简单的方法呢?
答案 0 :(得分:9)
transpose
方法呢?
a = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
#=> [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
a.transpose
#=> [[1, 6], [2, 7], [3, 8], [4, 9], [5, 10]]
此方法也可以在将来帮助您,例如:
a = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]]
#=> [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]]
a.transpose
#=> [[1, 6, 11], [2, 7, 12], [3, 8, 13], [4, 9, 14], [5, 10, 15]]
答案 1 :(得分:5)
a = [[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]
a.first.zip(a.last)
答案 2 :(得分:2)
如果您确定子阵列的长度相同,则可以使用Array#transpose:
[[1,2,3,4,5],[6,7,8,9,10]].transpose
#=> [[1, 6], [2, 7], [3, 8], [4, 9], [5, 10]]
作为奖励,它适用于超过2个阵列:
[[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]].transpose
#=> [[1, 6, 11], [2, 7, 12], [3, 8, 13], [4, 9, 14], [5, 10, 15]]
如果您不确定子阵列的长度是否相同:
[[1,2,3,4,5],[6,7,8,9], [10,11]].reduce(&:zip).map(&:flatten)
#=> [[1, 6, 10], [2, 7, 11], [3, 8, nil], [4, 9, nil], [5, nil, nil]]
在此示例中使用transpose会抛出IndexError。
答案 3 :(得分:1)
使用并行分配:
a, b = [[1, 2, 3, 4, 5],[6, 7, 8, 9, 10]]
a.zip b #=> [[1, 6], [2, 7], [3, 8], [4, 9], [5, 10]]