2012-01-15 30 views
1

如果我有这样一个数组:[0, 1, 2, 3, 4, 5],是否有内置的方法来创建此: [[0, 1, 2], [3, 4, 5]]给定的宽度3?如果没有内置的方法,我该如何改进?红宝石内置方法从单尺寸阵列创建多维阵列

def multi_to_single(array, width) 
    return [].tap{|md_array| 
     (array.length.to_f/width).ceil.times {|y| 
      row = (array[(y*width), width]) 
      md_array.push(row + Array.new(width - row.length)) 
     } 
    } 
end 

我觉得我错过了一些明显的东西,因为我还没有编程一段时间的红宝石! 在此先感谢,埃尔。

编辑:它需要在核心库,所以没有轨道上的红宝石或任何东西。

回答

4

我认为这是你在找什么:

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

使用Ruby 1.9.2p136(2010-12-25修订30365)

+0

这同样也是in_groups_of的实现方式。 – Alkaline 2012-01-15 13:02:49

1

您可以在Rails中使用in_groups_of方法来解决这个问题!

+0

这是很不错的,虽然我在寻找核心库中的一些东西,我会编辑我的问题来澄清这一点。虽然看源代码很有用! – Ell 2012-01-15 12:23:32

+0

我认为它不直接存在于核心库中。 – Cydonia7 2012-01-15 12:25:12

+0

它不存在?好的,我会将你的答案标记为正确的,然后在离开这个问题之后打开一段时间,看看是否有其他人回答。 – Ell 2012-01-15 12:29:04