ruby - 如何将整数数组总结为范围数组?

标签 ruby arrays algorithm functional-programming range

我想接受如下输入:

[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/

相关文章:

ruby-on-rails - 在 Rails 中,如何像 AngelList 那样为任意字符串生成路由?

ruby - 在 ruby​​ 中编写多维字符数组的更优雅的方法?

java - 将数组传递给方法(java)

c - 优化数组处理循环

algorithm - 给定的开括号和闭括号字符串告诉它是否是有效字符串

ruby - 使用 Ruby 合并 JSON 中的记录

ruby - Sinatra 的多个 block 参数

javascript - 使用 jquery 从 json 中删除特定行

arrays - ElasticSearch按数组第一个索引处的NestedObject中的字段排序

algorithm - 尝试所有 3 位数锁的最短字符串