Ruby-методы эквивалент "if a in list" в python?

В python я могу использовать это, чтобы проверить, есть ли элемент в списке a:

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

Как это можно сделать в Ruby?

Ответ 1

Используйте метод include?():

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

EDIT: (1..10) Range в Ruby, если вам нужен массив (список):

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

Ответ 2

Диапазон имеет метод ===, который проверяет, является ли аргумент частью диапазона.

Вы используете его следующим образом:

(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 # === (value) сравнивает значение только с диапазоном # сначала и Range # последним.
  • Если вы сначала вызываете Range # to_a, а затем Array # include?, он запускается в O (n), так как Range # to_a, необходимо заполнить массив n элементами, а Array # включить? необходимо снова выполнить поиск по 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