2014-04-27 37 views
5

Ich möchte überprüfen, ob Elemente in diesem Array words = ["foo", "bar", "spooky", "rick james"] Teilzeichenfolgen des Ausdrucks sentence = "something spooky this way comes" sind.Überprüfen, ob eine Zeichenfolge Teilzeichenfolgen aus einem Array enthält

Geben Sie true zurück, wenn eine Übereinstimmung vorliegt, false, wenn nicht.

Meine aktuelle Lösung (funktioniert aber wahrscheinlich ineffizient, ich lerne Rubin noch):

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 

Antwort

17

Ihre Lösung ist effizient, es ist einfach nicht so ausdrucksstark wie Rubin Sie sein können. Rubin bietet die Enumerable#any? Methode zum Ausdruck bringen, was Sie mit dieser Schleife tun:

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

gotta love Rubin ... (wird in 4 min akzeptieren, wenn timer is up) –

+4

benutze 'include?' als 'includes?' funktioniert nicht für mich in ruby2.0 – Radek

+1

Es gibt kein 'includes?' in Ruby. Diese Antwort muss bearbeitet werden, um 'include?' Zu verwenden – JEMaddux

4

Eine weitere Möglichkeit ist es, einen regulären Ausdruck zu verwenden:

if Regexp.union(words) =~ sentence 
    # ... 
end 
Verwandte Themen