web-dev-qa-db-fra.com

Recherchez plusieurs éléments dans le tableau à l'aide de .include? - Ruby Débutant

Existe-t-il une meilleure façon d'écrire ceci:

if myarray.include? 'val1' ||
   myarray.include? 'val2' ||
   myarray.include? 'val3' ||
   myarray.include? 'val4'
52
Hopstream

Utilisation des intersections définies ( Array #: & ):

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

Vous pouvez également boucler (any? s'arrêtera à la première occurrence):

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

C'est correct pour les petits tableaux, dans le cas général, il vaut mieux avoir des prédicats O(1):

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

Avec Ruby> = 2.1, utilisez Set # intersect :

myarray.to_set.intersect?(values.to_set)
98
tokland

Créez votre propre méthode réutilisable:

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

Usage

"a string with many words".include_any?(["a", "string"])
4
Jeremy Lynch