Ruby 具有范围值的数组?

Ruby 具有范围值的数组?,ruby,arrays,range,Ruby,Arrays,Range,我本来希望它返回true,但是3..9没有被翻译成[3,4,5,6,7,8,9] 我错过了一些愚蠢的事情,但我想不出来。基本上,我想用常规的fixnums和ranges来初始化它。你必须对它进行splat a = [1, 2, 3..9, 10, 15, 20..43] print a.include?(5) # Returns false 你必须挥霍它 a = [1, 2, 3..9, 10, 15, 20..43] print a.include?(5) # Returns false

我本来希望它返回
true
,但是
3..9
没有被翻译成
[3,4,5,6,7,8,9]

我错过了一些愚蠢的事情,但我想不出来。基本上,我想用常规的fixnums和ranges来初始化它。

你必须对它进行splat

a = [1, 2, 3..9, 10, 15, 20..43]
print a.include?(5) # Returns false
你必须挥霍它

a = [1, 2, 3..9, 10, 15, 20..43]
print a.include?(5) # Returns false

另一个解决方案,没有splat

a = [1, 2, *3..9, 10, 15, 20..43]
a.include?(5) # => true

另一个解决方案,没有splat

a = [1, 2, *3..9, 10, 15, 20..43]
a.include?(5) # => true
如果您想要一种不需要将范围转换为数组元素的“惰性”方法,请尝试使用
==
(大小写相等)运算符

a = [1, 2, 3..9, 10, 15, 20..43]

a.any? {|i| i.kind_of?(Range) ? i.include?(5) : i == 5 }
# => true 
我建议使用这种方法,因为它比将范围分散到单独的元素中要有效得多。

如果您想要一种不需要将范围转换为数组元素的“更懒惰”的方法,请尝试使用
==
(大小写相等)运算符

a = [1, 2, 3..9, 10, 15, 20..43]

a.any? {|i| i.kind_of?(Range) ? i.include?(5) : i == 5 }
# => true 

我建议使用这种方法,因为它比将范围分散到单独的元素中要有效得多。

但要小心分散范围。通过设置一个范围(如
*1..1_000_000_000_000_000
),很容易创建一个不适合内存的数组。范围是表示大序列的一种非常有效的方法,因此,如果您使用的是大范围,那么最好实现一个更智能的条件测试,该测试知道如何与单个值进行比较,以及如何将其包含在范围内。为什么不同时使用第二个范围呢?[1,2,*3..9,10,15,*20..43]@Nishu没有理由。我只是试着让欧普知道他错过了什么,就像他问的那样。如果他需要的话,他会把它弄脏的。:-)不过要小心溅洒范围。通过设置一个范围(如
*1..1_000_000_000_000_000
),很容易创建一个不适合内存的数组。范围是表示大序列的一种非常有效的方法,因此,如果您使用的是大范围,那么最好实现一个更智能的条件测试,该测试知道如何与单个值进行比较,以及如何将其包含在范围内。为什么不同时使用第二个范围呢?[1,2,*3..9,10,15,*20..43]@Nishu没有理由。我只是试着让欧普知道他错过了什么,就像他问的那样。如果他需要的话,他会把它弄脏的。:-)