我有一个数组,如下所示:
=> [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]]
我想按内部数组中元素的顺序重新排列它,例如:
=> [[1,6,11],[2,7,12],[3,8,13],[4,9,14],[5,10,15]]
我怎样才能做到这一点?
我知道我可以迭代一个数组数组,比如
array1.each do |bla,blo|
#do anything
end
但是内部数组的边不是固定的。
我有一个数组,如下所示:
=> [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15]]
我想按内部数组中元素的顺序重新排列它,例如:
=> [[1,6,11],[2,7,12],[3,8,13],[4,9,14],[5,10,15]]
我怎样才能做到这一点?
我知道我可以迭代一个数组数组,比如
array1.each do |bla,blo|
#do anything
end
但是内部数组的边不是固定的。
p [[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]]
使用transpose
方法Array
a = [[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]]
请注意,这仅适用于数组长度相同的情况。
如果您想处理彼此具有不同长度的转置数组,应该这样做
class Array
def safe_transpose
max_size = self.map(&:size).max
self.dup.map{|r| r << nil while r.size < max_size; r}.transpose
end
end
并将产生以下
a = [[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15,16]]
a.safe_transpose
#=> [[1, 6, 11], [2, 7, 12], [3, 8, 13], [4, 9, 14], [5, 10, 15], [nil, nil, 16]]