gpt4 book ai didi

ruby - 减去数字范围算法

转载 作者:数据小太阳 更新时间:2023-10-29 08:43:29 27 4
gpt4 key购买 nike

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

例如:

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 中执行此操作的最干净、最有效的方法是什么?

最佳答案

这是一个故意天真的解决方案。它效率不高,但易于理解且非常简短。

arr0 解构为数字列表:

n1 = arr0.flat_map { |a, b| (a..b).to_a }
#=> [0, 1, ..., 49, 50, 60, 61, ..., 79, 80, 100, 101, ..., 149, 150]

同样适用于 arr1:

n2 = arr1.flat_map { |a, b| (a..b).to_a }
#=> [4, 5, 6, 7, 8, 15, 16, 17, 18, 19, 20]

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

(n1 - n2).chunk_while { |a, b| a.succ == b }.map(&:minmax)
#=> [[0, 3], [9, 14], [21, 50], [60, 80], [100, 150]]

关于ruby - 减去数字范围算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41126506/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com