首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >减数范围算法

减数范围算法
EN

Stack Overflow用户
提问于 2016-12-13 16:54:29
回答 1查看 540关注 0票数 2

如何完成以下操作:取一个范围数组并从中减去另一个范围数组。

例如:

代码语言:javascript
复制
arr0 = [[0,50],[60,80],[100,150]] # 0-50, 60-80, etc.

arr1 = [[4,8],[15,20]] # 4-8, 15-20, etc.

# arr0 - arr1 magic

result = [[0,3],[9,14],[21,50],[60,80],[100,150]] # 0-3, 9-14, etc.

在Ruby中,最干净和最有效的方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-13 17:33:57

这是一个刻意幼稚的解决办法。它效率不高,但容易理解,而且很短。

arr0解构成一个数列:

代码语言:javascript
复制
n1 = arr0.flat_map { |a, b| (a..b).to_a }
#=> [0, 1, ..., 49, 50, 60, 61, ..., 79, 80, 100, 101, ..., 149, 150]

同样适用于arr1

代码语言:javascript
复制
n2 = arr1.flat_map { |a, b| (a..b).to_a }
#=> [4, 5, 6, 7, 8, 15, 16, 17, 18, 19, 20]

然后,从n2中减去n1并重新组合连续数字:

代码语言:javascript
复制
(n1 - n2).chunk_while { |a, b| a.succ == b }.map(&:minmax)
#=> [[0, 3], [9, 14], [21, 50], [60, 80], [100, 150]]
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41126506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档