2014-04-27 24 views
5

Chcę sprawdzić, czy jakiekolwiek elementy w tej tablicy words = ["foo", "bar", "spooky", "rick james"] są podciągami wyrażenia sentence = "something spooky this way comes".Sprawdź, czy ciąg zawiera jakiekolwiek podciągi z tablicy

Zwraca wartość prawda, jeśli istnieje dopasowanie, jeśli nie, fałsz.

Moje obecne rozwiązanie (prace ale prawdopodobnie nieefektywne, wciąż się uczę Ruby):

is_there_a_substring = false 
words.each do |word| 
    if sentence.includes?(word) 
    is_there_a_substring = true 
    break 
    end 
end 
return is_there_a_substring 

Odpowiedz

17

Twoje rozwiązanie jest skuteczne, to po prostu nie tak wyraziste jak Ruby pozwala być. Ruby zapewnia metodę Enumerable#any? aby wyrazić to, co robisz z tej pętli:

words.any? { |word| sentence.include?(word) } 
+0

pokochałbyś rubinowy ... (zaakceptuje w 4 minuty, kiedy timer jest w górze) –

+4

użycie 'include?' jako 'zawiera?' nie działa dla mnie w ruby2.0 – Radek

+1

Nie ma 'zawiera?' w Ruby. Tę odpowiedź należy edytować, aby użyć opcji 'include?' – JEMaddux

4

Inną opcją jest użycie wyrażenia regularnego:

if Regexp.union(words) =~ sentence 
    # ... 
end 
Powiązane problemy