代码之家  ›  专栏  ›  技术社区  ›  bragboy

需要在Ruby[duplicate]中将数组拆分为指定大小的子数组

  •  30
  • bragboy  · 技术社区  · 14 年前

    arr = [4, 5, 6, 7, 8, 4, 45, 11]
    

    我想要一个像

    sub_arrays = split (arr, 3)
    

    [[4, 5, 6], [7,8,4], [45,11]]

    注意:这个问题不是“如何组块数组”的重复问题组块问题是关于批处理的问题,这个问题是关于拆分数组的问题。

    4 回复  |  直到 5 年前
        1
  •  52
  •   sepp2k    14 年前
    arr.each_slice(3).to_a
    

    each_slice to_a .

    require 'enumerator'
    arr.enum_for(:each_slice, 3).to_a
    

    如果您只需要迭代,只需执行以下操作:

    arr.each_slice(3) do |x,y,z|
      puts(x+y+z)
    end
    
        2
  •  4
  •   JstRoRR    10 年前

    也可以将其用于特定目的:

    ((1..10).group_by {|i| i%3}).values    #=> [[1, 4, 7, 10], [2, 5, 8], [3, 6, 9]]
    

    如果只需要两个分区数组:

    (1..6).partition {|v| v.even? }  #=> [[2, 4, 6], [1, 3, 5]]
    
        3
  •  3
  •   Darren    14 年前

    arr.in_groups(3, false)
    

    Checkout the api docs

        4
  •  2
  •   Nick Roz    8 年前

    在Rails中,可以使用 in_groups_of 将数组拆分为指定大小的组

    arr.in_groups_of(3) # => [[4, 5, 6], [7, 8, 4], [45, 11, nil]]
    arr.in_groups_of(3, false) # => [[4, 5, 6], [7, 8, 4], [45, 11]]
    

    in_groups 将数组拆分为指定数量的平衡组

    arr.in_groups(5) # => [[4, 5], [6, 7], [8, 4], [45, nil], [11, nil]]
    arr.in_groups(5, false) # => [[4, 5], [6, 7], [8, 4], [45], [11]]