Ruby排除范围内的值

时间:2015-02-05 23:19:39

标签: ruby arrays range

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

示例:

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

这是怎么做到的?

3 个答案:

答案 0 :(得分:6)

你的例子是:

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]

答案 1 :(得分:2)

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

(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 

答案 2 :(得分:0)

  

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

根据ruby-docs,您可以使用Enumerable#grep_v排除 范围:

(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)