2011-07-26 19 views
2

配列の配列 "a"をレンダリングする次のループがあります。Ruby - ループによって位置によってグループ化された配列の配列を作成します。

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

私が作成したいことは、ループをグループアレイは次のとおりです。各配列は、インデックス(画像の位置)とimage_idはここ

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

によって規定される出力の例です最初の3枚の画像の位置は、次の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 } 
関連する問題