Ruby - создает массив массивов, сгруппированных по позициям через цикл - PullRequest
2 голосов
/ 26 июля 2011

У меня есть следующий цикл, который визуализирует массив "а" массивов.Каждый массив определяется индексом (позицией изображения) и 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]] 

То, что я хочу создать, это циклкоторый может сгруппировать массивы первых трех позиций изображений, затем следующих трех и т. д. в массив "final" (так как мой английский так себе, пожалуйста, посмотрите пример, которого я хочу достичь:)

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 Ответ

4 голосов
/ 26 июля 2011
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 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...