我想接受如下输入:
[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
,因此我们使用该值对输入数组进行分块(连续项的分组)。最后,我们只需要获取每个组的第一个和最后一个元素来构建对。
关于ruby - 如何将整数数组总结为范围数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8621733/