Existe-t-il une meilleure façon d'écrire ceci:
if myarray.include? 'val1' ||
myarray.include? 'val2' ||
myarray.include? 'val3' ||
myarray.include? 'val4'
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)
Créez votre propre méthode réutilisable:
class String
def include_any?(array)
array.any? {|i| self.include? i}
end
end
"a string with many words".include_any?(["a", "string"])