作为对@dawg答案的改进,如果我们通过的块
:slice_when
检查
b
大于
a
:
data = arr.slice_when { |a, b| b.length < a.length }.to_a
结果是:
[[["1"], ["1"], ["2", "2"], ["2.1", "0.8"], ["2.2", "0.2"]],
[["1"], ["2", "3"], ["2", "0.8"], ["2", "0.4"]],
[["1"], ["2"], ["1", "0.8"], ["2", "0.4"], ["3", "0.3"]]]
这只能正确处理数组有长度的情况
1
或
2
。为了使其更加稳健,我们可以检查我们只在
b
具有长度
1.
。
data = arr.slice_when { |a, b| b.length == 1 && b.length < a.length }.to_a
现在,如果:
arr = [["1"], ["1"], ["2", "2"], ["2.1", "0.8"], ["2.2", "0.2"], ["1", "3", "4"], ["1", "1"],
["1"], ["2", "3"], ["2", "0.8"], ["2", "0.4"], ["1"], ["2"],
["1", "0.8"], ["2", "0.4"], ["3", "0.3"]]
结果是:
[[["1"], ["1"], ["2", "2"], ["2.1", "0.8"], ["2.2", "0.2"], ["1", "3", "4"], ["1", "1"]],
[["1"], ["2", "3"], ["2", "0.8"], ["2", "0.4"]],
[["1"], ["2"], ["1", "0.8"], ["2", "0.4"], ["3", "0.3"]]]