2011-11-06 16 views

Odpowiedz

80

Korzystanie zestaw skrzyżowań (Array#:&):

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

Można również pętla (any? zatrzyma się przy pierwszym wystąpieniu):

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

to ok dla małych tablic, w ogólnym przypadku lepiej mieć o (1) predykaty:

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

z Ruby> = 2,1, użyj Set#intersect:

myarray.to_set.intersect?(values.to_set) 
+1

jest tam coś prostsze czytać tak 'jeśli myarray.include? ['val1', 'val2', 'val3'] 'Jeśli nie, to domyślam się, że twoja odpowiedź wydaje się najlepsza. – Hopstream

+0

@Hopstream, czy dodałeś inną implementację? – tokland

+2

dlaczego warto skorzystać z formularza negatywnego? dlaczego nie używać po prostu '(self & other) .any?' zamiast '! (self & other) .empty?' –

Powiązane problemy