Ruby 排除范围内的值

Ruby exclude value in range

我想使用范围 (0..x) 构建一个数组,同时排除某些范围和值。

示例:

array = [1, 2, 3, .., 50, 60, .., 98, 100]

这是怎么做到的?

从一个范围中减去另一个范围:

(1..100).to_a - (51...60).to_a

要删除其他特定值,请创建这些值的数组并将它们也减去:

(1..100).to_a - (51...60).to_a - [82, 56, 23]

添加一些清洁度:

values_to_remove = [(51..60), [34,67,98]].flat_map(&:to_a)
(1..100).to_a - values_to_remove 

你的例子是:

array = [1, 2, 3,..., 50, 60,..., 98, 100]

如果这意味着 array 包含数字 1506098100,那么你可以这样写:

array = [*1..50, *60..98, 100]
  #=> [1, 2, 3,...49, 50, 60, 61, 62,...98, 100]

I want to build an array using range (0..x) while excluding certain ranges and values.

根据 ruby-docs,您可以使用 Enumerable#grep_v:

排除 a 范围
(1..10).grep_v(2..4) #=> [1, 5, 6, 7, 8, 9, 10]

grep_v 仅定义一个参数,因此要排除多个范围,您必须执行以下操作:

(1..10).grep_v(2..4).grep_v(6..8) #=> [1, 5, 9, 10]

如果不需要范围,则可以将值用作参数,例如grep_v(1).