Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ruby methods equivalent of "if a in list" in python?

In python I can use this to check if the element in list a:

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

How this can be done in Ruby?

like image 648
noomz Avatar asked Oct 07 '09 07:10

noomz


2 Answers

Use the include?() method:

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

EDIT: (1..10) is Range in Ruby , in the case you want an Array(list) :

(1..10).to_a #=> [1,2,3,4,5,6,7,8,9,10]
like image 171
pierrotlefou Avatar answered Oct 21 '22 06:10

pierrotlefou


Range has the === method, which checks whether the argument is part of the range.

You use it like this:

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

or as you wrote it:

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

You must be sure the values of the range and the value you are testing are of compatible type, otherwise an Exception will be thrown.

(2.718..3.141) === 3 #=> true
(23..42) === "foo"   # raises exception
  • This is done in O(1), as Range#===(value) only compares value with Range#first and Range#last.
  • If you first call Range#to_a and then Array#include?, it runs in O(n), as Range#to_a, needs to fill an array with n elements, and Array#include? needs to search through the n elements again.

If you want to see the difference, open irb and type:

(1..10**9) === 5            #=> true
(1..10**9).to_a.include?(5) # wait some time until your computer is out of ram and freezess
like image 22
johannes Avatar answered Oct 21 '22 06:10

johannes