Ruby 将一个数组划分为多个数组,每个数组中的单元数由大小决定
例如,我有一个数组:[2,4,6,7,9,12,1],我想把它除以大小[2,2,3] 我想要的输出是: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]]
我试过:
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 >