我有一个数组,它长这样:
arr = [4, 5, 6, 7, 8, 4, 45, 11]
我想要一个像这样的高级方法:
sub_arrays = split (arr, 3)
这应该返回以下内容:[[4, 5, 6], [7,8,4], [45,11]]
注意:此问题与“如何分块数组”不是重复的。分块问题是关于批处理,而这个问题是关于拆分数组。
arr.each_slice(3).to_a
each_slice
返回一个Enumerable,如果这已经足够了,你不需要调用to_a
。在1.8.6中,你需要执行以下操作:require 'enumerator'
arr.enum_for(:each_slice, 3).to_a
如果你只需要进行迭代,你可以简单地执行:
arr.each_slice(3) do |x,y,z|
puts(x+y+z)
end
b=[]; b << a.shift(3) until a.empty?
。它的作用是将数组 a
中的元素每三个一组地移动到数组 b
中,直到数组 a
为空。 - Nakilonc,b=a.dup,[]; b << c.shift(3) until c.empty?
。如果a
不是一维数组等,则可能会出现dup
问题。 - Nakilonin_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]]
您也可以针对特定目的使用此功能:
((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]]
array.group_by
非常有用。您可以执行以下操作: false_group, true_group = some_array.group_by{|i| i.test_something?()}.values
- Automatico