在结构之后拆分ruby数组的最快方法

时间:2014-02-18 21:14:54

标签: ruby arrays

我正在寻找将数组拆分为不同大小的子数组的最快方法。每个数组的大小由配置文件驱动。

示例:

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]

任何有良好表现结果的想法?

2 个答案:

答案 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]]