2014-04-27 29 views
5

bir dizeden içerip içermediğini kontrol edin Bu dizideki words = ["foo", "bar", "spooky", "rick james"] öğesindeki herhangi bir öğenin sentence = "something spooky this way comes" tümcecinin alt dizeleri olup olmadığını kontrol etmek istiyorum.Bir dize bir dizi

Herhangi bir eşleşme varsa true, eğer değilse yanlış.

Bulunduğum çözeltisi (çalışır ancak, hala Ruby öğreniyorum muhtemelen verimsiz):

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 

cevap

17

Çözümünüz, verimli Yakut sen olmasını sağlar gibi gündemle etkileyici değil. Yakut o döngü ile ne yaptığını ifade etmek Enumerable#any? yöntem sağlar:

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

sevmelisin yakut ... (süreölçer doldu) –

+4

'include? ',' include? 'olarak kullanılır. ruby2.0 içinde benim için çalışmaz – Radek

+1

Ruby'de' includes? Bu cevabın 'include? 'Kullanmak için düzenlenmiş olması gerekiyor. – JEMaddux

4
Diğer bir seçenek normal bir ifade kullanmaktır

: 4 dk zaman içinde kabul edecek

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