2013-02-22 194 views
0

的陣列I有陣列的像以下的數組:遍歷陣列

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

但是內陣列的側不固定。

+0

應該發生什麼,當內部數組是不同的大小?是否應將'nil'插入轉置陣列以縮短內部陣列? – 2013-02-22 23:19:26

+0

對不起,我不完全清楚。內部陣列沒有固定的大小,但它們都具有相同的大小。 – 2013-02-22 23:26:31

+1

好的,我明白了。如果它們的大小始終相同,那麼'轉置'就是要走的路。 – 2013-02-22 23:31:09

回答

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