Ruby - 创建一个通过循环按位置分组的数组数组

时间:2011-07-26 09:32:33

标签: ruby-on-rails ruby arrays for-loop

我有以下循环呈现数组“a”的数组。每个数组由索引(图像的位置)和image_id

定义
<% 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

我试图找出如何做到这一点(收集?)但没有任何具体结果。

感谢您的任何想法!

1 个答案:

答案 0 :(得分: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 }