Ruby中相当于Python中“if a in list”的方法?

18 投票
2 回答
12231 浏览
提问于 2025-04-15 14:52

在Python中,我可以用这个方法来检查列表a中是否有某个元素:

>>> a = range(10)
>>> 5 in a
True
>>> 16 in a
False

那在Ruby中怎么做呢?

2 个回答

10

Range有一个叫做===的方法,它用来检查某个值是否在这个范围内。

你可以这样使用它:

(1..10) === 5  #=> true
(1..10) === 15 #=> false

或者像你写的那样:

a= (1..10)
a === 5  #=> true
a === 16 #=> false

你需要确保范围的值和你要测试的值是相同类型的,否则会出现错误。

(2.718..3.141) === 3 #=> true
(23..42) === "foo"   # raises exception
  • 这个检查的速度是O(1),因为Range#===只需要把值和范围的第一个值(Range#first)和最后一个值(Range#last)进行比较。
  • 如果你先调用Range#to_a,然后再用Array#include?,速度会变成O(n),因为Range#to_a需要把范围里的所有元素放到一个数组里,这个过程需要n的时间,而Array#include?又要在这个n个元素中查找一次。

如果你想看看这个区别,可以打开irb,然后输入:

(1..10**9) === 5            #=> true
(1..10**9).to_a.include?(5) # wait some time until your computer is out of ram and freezess
27

使用 include?() 方法:

(1..10).include?(5) #=>true
(1..10).include?(16) #=>false

编辑:(1..10) 在 Ruby 中是一个 范围,如果你想要一个数组(列表):

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

撰写回答