Ruby 将一个数组划分为多个数组,每个数组中的单元数由大小决定

Ruby 将一个数组划分为多个数组,每个数组中的单元数由大小决定,ruby,arrays,Ruby,Arrays,例如,我有一个数组:[2,4,6,7,9,12,1],我想把它除以大小[2,2,3] 我想要的输出是:[[2,4],[6,7],[9,12,1]] 我试过: a=[2,4,6,7,9,12,1] b=[2,2,3] c=[] b.each{|m|c<<a.shift(m)} c a=[2,4,6,7,9,12,1] b=[2,2,3] c=[] b、 每个{m | c都可以使用: 这种方法看起来是正确的,您可以使用map而不是each更简洁地执行此操作: c = b.map{|m|

例如,我有一个数组:[2,4,6,7,9,12,1],我想把它除以大小[2,2,3]

我想要的输出是:
[[2,4],[6,7],[9,12,1]]

我试过:

a=[2,4,6,7,9,12,1]
b=[2,2,3]
c=[]
b.each{|m|c<<a.shift(m)}
c
a=[2,4,6,7,9,12,1]
b=[2,2,3]
c=[]
b、 每个{m | c都可以使用:


这种方法看起来是正确的,您可以使用
map
而不是
each
更简洁地执行此操作:

c = b.map{|m| a.shift(m)}
或者,使用
方法
速记:

c = b.map(&a.method(:shift))
# => [[2, 4], [6, 7], [9, 12, 1]] 
你可以有:

r = [2, 4, 6, 7, 9, 12, 1]

s = [2, 2, 3].map do |e|
  r.shift(e)
end

p s
输出:

[[2, 4], [6, 7], [9, 12, 1]]

以下两种方法不会破坏原始阵列,正如
array#shift
所做的那样:

a=[2,4,6,7,9,12,1]
b=[2,2,3]
方法#1

方法#2

这会奏效的

2.1.0 :029 > a=[2,4,6,7,9,12,1]
 => [2, 4, 6, 7, 9, 12, 1] 
2.1.0 :030 > b = [2,2,3]
 => [2, 2, 3] 
2.1.0 :031 > b.inject([]){|result, value| result << a.take(value) }
 => [[2, 4], [2, 4], [2, 4, 6]] 
2.1.0 :032 > 
2.1.0:029>a=[2,4,6,7,9,12,1]
=> [2, 4, 6, 7, 9, 12, 1] 
2.1.0:030>b=[2,2,3]
=> [2, 2, 3] 
2.1.0:031>b.注入([]){结果,值{结果[[2,4],[2,4],[2,4,6]]
2.1.0 :032 > 

如果您发现任何答案都有帮助,请选择最有帮助的答案。
cum = 0
b.map { |n| a[cum..(cum+=n)-1] }
  #=> [[2, 4], [6, 7], [9, 12, 1]]
cum = 0
b.map { |n| a.values_at(*(cum..(cum+=n)-1)) }
  #=> [[2, 4], [6, 7], [9, 12, 1]]
2.1.0 :029 > a=[2,4,6,7,9,12,1]
 => [2, 4, 6, 7, 9, 12, 1] 
2.1.0 :030 > b = [2,2,3]
 => [2, 2, 3] 
2.1.0 :031 > b.inject([]){|result, value| result << a.take(value) }
 => [[2, 4], [2, 4], [2, 4, 6]] 
2.1.0 :032 >