Check for multiple items in array using .include? — Ruby Beginner

前端 未结 2 1386
迷失自我
迷失自我 2020-12-13 01:26

Is there a better way to write this:

if myarray.include? \'val1\' ||
   myarray.include? \'val2\' ||
   myarray.include? \'val3\' ||
   myarray.include? \'va         


        
相关标签:
2条回答
  • 2020-12-13 02:08

    Create your own reusable method:

    class String
      def include_any?(array)
        array.any? {|i| self.include? i}
      end
    end
    

    Usage

    "a string with many words".include_any?(["a", "string"])
    
    0 讨论(0)
  • 2020-12-13 02:12

    Using set intersections (Array#:&):

    (myarray & ["val1", "val2", "val3", "val4"]).present?
    

    You can also loop (any? will stop at the first occurrence):

    myarray.any? { |x| ["val1", "val2", "val3", "val4"].include?(x) }
    

    That's ok for small arrays, in the general case you better have O(1) predicates:

    values = ["val1", "val2", "val3", "val4"].to_set
    myarray.any? { |x| values.include?(x) }
    

    With Ruby >= 2.1, use Set#intersect:

    myarray.to_set.intersect?(values.to_set)
    
    0 讨论(0)
提交回复
热议问题