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)
是否有一种解决方案,可以保留上述片段的表现力?
提前致谢。
一种功能性的模块化方法:对输入数组,块进行索引,并将其映射到所需的输出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)