2012-01-15 47 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