2014-05-16 20 views

Odpowiedz

12

Tak, jak poniżej:

if %w(string1 string2 string3).any? { |s| my_string.include? s } 
    # your code 
end 

Oto dokumentacja: Enumerable#any?

Podania każdy element kolekcji do danego bloku . Metoda zwraca true, jeśli blok kiedykolwiek zwróci wartość inną niż false lub zero. Jeśli blok nie zostanie podany, Ruby dodaje niejawny blok z { |obj| obj }, który spowoduje każdy? zwraca wartość true, jeśli co najmniej jeden z elementów kolekcji nie jest false lub nil.

Oto inny sposób (więcej najszybciej):

[13] pry(main)> ary = %w(string1 string2 string3) 
=> ["string1", "string2", "string3"] 
[14] pry(main)> Regexp.union(ary) 
=> /string1|string2|string3/ 
[15] pry(main)> "abbcstring2"[Regexp.union(ary)] 
=> "string2" 
[16] pry(main)> "abbcstring"[Regexp.union(ary)] 
=> nil 

Wystarczy przeczytać Regexp::union i str[regexp] → new_str or nil.

+2

wow! bardzo ładnie i precyzyjnie :) – Pavan

+0

oh to świetnie wyjaśnić, dzięki. – Kuroun

3

Cóż, zawsze można użyć wyrażenia regularnego tutaj (ryzykując kolejną jwz cytat :)

if mystring =~ /string1|string2|string3/ 
    ... 
end 
Powiązane problemy