Ruby methods equivalent of “if a in list” in python?

前端 未结 2 1306
情深已故
情深已故 2020-12-30 02:06

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


        
相关标签:
2条回答
  • 2020-12-30 02:55

    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
    
    0 讨论(0)
  • 2020-12-30 03:09

    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]
    
    0 讨论(0)
提交回复
热议问题