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
包含数字 1
到 50
、60
到 98
和 100
,那么你可以这样写:
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)
.
我想使用范围 (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
包含数字 1
到 50
、60
到 98
和 100
,那么你可以这样写:
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
:
(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)
.