在对Ruby数组进行分块时,将分块的开始索引作为结果的一部分

Cum*_*yah 2 ruby arrays chunking

我遇到一种情况,我想将初始化nils为的数组分成空段和包含连续数字的段。

我发现的高阶chunk函数Array为此提供了一个优雅的解决方案:

<< [nil,nil,1,2,nil,3].chunk { |e| !e.nil? }.each { |e| p e }

>> [false, [nil, nil]]
>> [true, [1, 2]]
>> [false, [nil]]
>> [true, [3]]
Run Code Online (Sandbox Code Playgroud)

但是,假设我希望输出也将起始索引包括在每个块中的原始数组中,即将上面的输出增加到类似以下内容:

>> [false, 0, [nil, nil]]
>> [true, 2, [1, 2]]
>> [false, 4, [nil]]
>> [true, 5, [3]]
Run Code Online (Sandbox Code Playgroud)

是否有一种解决方案,可以保留上述片段的表现力?

提前致谢。

tok*_*and 5

一种功能性的模块化方法:对输入数组,块进行索引,并将其映射到所需的输出O(n):

data = xs.each_with_index.chunk { |x, i| !x.nil? }.map do |match, pairs| 
  [match, pairs.first[1], pairs.map(&:first)] 
end
#=> [[false, 0, [nil, nil]], [true, 2, [1, 2]], [false, 4, [nil]], [true, 5, [3]]]
Run Code Online (Sandbox Code Playgroud)