我想使用范围(0..x)构建数组,同时排除某些范围和值。
示例:
array = [1, 2, 3, .., 50, 60, .., 98, 100]
这是怎么做到的?
答案 0 :(得分:6)
你的例子是:
array = [1, 2, 3,..., 50, 60,..., 98, 100]
如果这意味着array
要包含数字1
到50
,60
到98
和100
,那么你可以写的是:
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)
。