我正在寻找将数组拆分为不同大小的子数组的最快方法。每个数组的大小由配置文件驱动。
示例:
c = [1,2,3,4,5,6,7,8]
我的配置文件:
block
contents: 3
type: ...
scope ...
block
contents: 1
type: ...
scope ...
block
contents: 2
type: ...
scope ...
block
contents: 2
type: ...
scope ...
c.size等于每个块的内容编号之和。
我必须将我的数组拆分为'n'数组,其中n是我在配置文件中定义的块数,每个数组的大小是该块中定义的内容数。
给定数组和配置文件的结果是:
[1,2,3]
[4]
[5,6]
[7.8]
任何有良好表现结果的想法?
答案 0 :(得分:1)
c = [1,2,3,4,5,6,7,8]
d = [3,1,2,2]
d.map { |n| c.shift n } # => [[1, 2, 3], [4], [5, 6], [7, 8]]
这会破坏原始c
。
答案 1 :(得分:1)
马特回答的一个略微变体:
如果您将文件中的值读入:
a = [3,1,2,2]
然后你可以这样做:
a.each_with_object([]) {|e,b| b << c.shift(e)}
#=> [[1, 2, 3], [4], [5, 6], [7, 8]]