Подтвердить что ты не робот

Проверить наличие нескольких элементов массива с помощью .include? - Рубиновый новичок

Есть ли лучший способ написать это:

if myarray.include? 'val1' ||
   myarray.include? 'val2' ||
   myarray.include? 'val3' ||
   myarray.include? 'val4'
4b9b3361

Ответ 1

Использование набора пересечений (Array #: &):

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

Вы также можете выполнить цикл (any? будет останавливаться при первом вхождении):

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

Это нормально для небольших массивов, в общем случае лучше иметь предикаты O (1):

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

С Ruby >= 2.1 используйте Set # intersect:

myarray.to_set.intersect?(values.to_set)