0

次のような配列の配列があります。

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

ただし、内側の配列の側面は固定されていません。

4

2 に答える 2

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]]
于 2013-02-22T23:13:41.593 に答える
2

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]]
于 2013-02-22T23:14:00.783 に答える