迭代数组数组

时间:2013-02-22 23:10:19

标签: ruby

我有一个如下数组的数组:

=> [[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

但是内部数组的一面并没有固定。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

Array

上使用transpose方法
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]]