我有以下循环呈现数组“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
我试图找出如何做到这一点(收集?)但没有任何具体结果。
感谢您的任何想法!
答案 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 }