2011-02-08 47 views
2

可能重複:通過給定長度
Need to split arrays to sub arrays of specified size in Ruby在紅寶石由固定長度分割的陣列

什麼是段的最佳方式的陣列?我要的是下面的東西像「segment_by」:

[1, 2, 3, 4, 5, 6].segment_by(2) 
# => [[1, 2], [3, 4], [5, 6]] 

['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'].segment_by(3) 
# => [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h']] 

我設法想出如下,但它看起來不是很簡單:

class Array 
    def segment_by i 
     (0...length).group_by{|x| x.div(i)}.values.map{|a| a.map{|j| self[j]}} 
    end 
end 

我使用ruby1。 9.2。有沒有這樣的方法,有沒有更好的方法來做到這一點?

+1

P.S:沒有必要重複的答案也。 – Nakilon 2011-02-09 00:12:17

回答

8

使用each_slice

[1,2,3,4,5,6].each_slice(2).to_a  # => [[1, 2], [3, 4], [5, 6]] 
[1,2,3,4,5,6].each_slice(3).to_a  # => [[1, 2, 3], [4, 5, 6]]