在红宝石中按固定长度分割数组

saw*_*awa 2 ruby

可能重复:
需要在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']]
Run Code Online (Sandbox Code Playgroud)

我设法提出的是以下内容,但看起来不够简单:

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

我使用的是ruby1.9.2.是否有这样的方法,有更好的方法吗?

cam*_*cam 9

使用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]]
Run Code Online (Sandbox Code Playgroud)