2011-07-26 20 views
2

我有以下循環呈現數組「a」。每個陣列由索引(圖像的位置)和image_idRuby - 根據循環創建一個按位置分組的數組arrays

<% a = [] %> 
<% @portfolio_entry.images.each_with_index do |image, index| %> 
    <% a << [index, image.id] %> 
<% end %> 
<%= a %> 

此處定義是輸出的一個示例:

[[0, 2], [1, 1], [2, 1], [3, 2], [4, 1], [5, 1], [6, 3]] 

我想創建是一個環路,它可以組陣列前三圖像中的位置,那麼接下來的三個等......在「最後的」陣列(如我的英語馬馬虎虎請看例子,我想實現:)

Finalarray => [array1, array2, array3] 

array1 => [[0, 2], [1, 1], [2, 1]]  # position 0,1,2 
array2 => [[3, 2], [4, 1], [5, 1]]  # position 3,4,5 
array3 => [[6, 3]]      # position 6 

我試着圖我怎麼能做到這一點(收集?)但沒有任何具體結果。

感謝您的任何想法!

回答

4
a = [[0, 2], [1, 1], [2, 1], [3, 2], [4, 1], [5, 1], [6, 3]] 
array1, array2, array3 = a.each_slice(3).to_a 
array1 # => [[0, 2], [1, 1], [2, 1]] 
array2 # => [[3, 2], [4, 1], [5, 1]] 
array3 # => [[6, 3]] 

編輯:如果你需要更多的數組,離開to_a調用並處理塊中的切片。

final_array = [] 
a.each_slice(3) do |slice| 
    final_array << slice 
end 
# or 
final_array = a.each_slice(3).inject([]) { |arr, slice| arr << slice }