我想输入以下内容:
[1,2,4,5,6,7,9,13]
并将其转换为以下内容:
[[1,2],[4,7],[9,9],[13,13]]
每个子数组代表一个整数范围。
使用Enumerable#chunk的功能方法:
ranges = [1, 2, 4, 5, 6, 7, 9, 13] .enum_for(:chunk) # .chunk for Ruby >= 2.4 .with_index { |x, idx| x - idx } .map { |_diff, group| [group.first, group.last] } #=> [[1, 2], [4, 7], [9, 9], [13, 13]]
工作原理:一旦建立索引,数组中的连续元素就具有相同的x - idx,因此我们使用该值对输入数组进行分块(连续项的分组)。最后,我们只需要采用每个组的第一个和最后一个元素来构建对。
x - idx