我发现这个问题与我要提出的问题类似:
Split array up into n-groups of m size? 和 Need to split arrays to sub arrays of specified size in Ruby
这将数组拆分为三个数组,每个数组包含三个元素:
a.each_slice(3) do |x,y,z|
p [x,y,z]
end
所以,如果我这样做(我的数组大小为1000):
a.each_slice(200) do |a,b,c,d,e|
p "#{a} #{b} #{c} #{d} #{e}"
end
这应该将我的阵列分成5个阵列,每个阵列有200个成员?但它不是吗? 我实际需要做的是将200个随机元素放入5个数组中,我是否在正确的轨道上,我该怎么做?
答案 0 :(得分:1)
irb(main):001:0> a= (1..10).to_a
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
irb(main):002:0> a.sample(3)
=> [5, 10, 1]
irb(main):003:0> (1..3).map{ a.sample(3) }
=> [[6, 2, 5], [8, 7, 3], [4, 5, 7]]
irb(main):004:0>
答案 1 :(得分:1)
如果为each_slice的块提供单个参数,那么它将使用小于或等于给定参数的值数组填充该参数。在最后一次迭代中,如果剩下少于n个值,那么数组大小将是剩下的任何值。
如果为each_slice块提供多个参数,那么它将使用源数组中的值填充这些值。如果切片大小大于给定的参数数,则将忽略某些值。如果它小于参数的数量,则多余的参数将为nil。
a = (1..9).to_a
a.each_slice(3) {|b| puts b.inspect }
[1,2,3]
[4,5,6]
[7,8,9]
a.each_slice(4) {|b| puts b.inspect }
[1,2,3,4]
[5,6,7,8]
[9]
a.each_slice(3) {|b,c,d| puts (b + c + d)}
6 # 1 + 2 + 3
15 # 4 + 5 + 6
24 # 7 + 8 + 9
a.each_slice(3) {|b,c| puts (b + c)}
3 # 1 + 2, skips 3
9 # 4 + 5, skips 6
15 # 7 + 8, skips 9
a.each_slice(2) {|b,c| puts c.inspect}
2
4
6
8
nil
a.each_slice(3) {|b,c,d,e| puts e.inspect}
nil
nil
nil
答案 2 :(得分:0)
如果要将结果分配给5个不同的数组,可以使用splat运算符,如下所示:
a,b,c,d,e = *(1..1000).each_slice(200).to_a
答案 3 :(得分:0)
实际上,您将返回一个插入了五个元素的字符串。 你可以尝试一下:
a1 = [], a2 = [], a3 = [], a4 = [], a5 = []
a.each_slice(5) do |a,b,c,d,e|
a1 << a
a2 << b
a3 << c
a4 << d
a5 << e
end
最终会有五个数组,每个数组包含200个元素。 我用尽可能简单的语法来说清楚,你可以 使它更加浓缩。