【问题标题】:Ruby - Create an array of arrays grouped by positions through a loopRuby - 通过循环创建按位置分组的数组数组
【发布时间】:2011-07-26 09:32:32
【问题描述】:

我有以下循环呈现数组“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

我试图弄清楚我该怎么做(收集?)但没有任何具体结果。

感谢您的任何想法!

【问题讨论】:

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


    【解决方案1】:
    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 }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-11
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 2019-07-20
      • 1970-01-01
      相关资源
      最近更新 更多