Jestem nowicjuszem w Ruby. Czy są jakieś lepsze sposoby, aby napisać to:Ruby Sprawdź warunek, czy ciąg zawiera wiele różnych ciągów znaków?
if (mystring.include? "string1") || (mystring.include? "string2") ||
(mystring.include? "string3")
Jestem nowicjuszem w Ruby. Czy są jakieś lepsze sposoby, aby napisać to:Ruby Sprawdź warunek, czy ciąg zawiera wiele różnych ciągów znaków?
if (mystring.include? "string1") || (mystring.include? "string2") ||
(mystring.include? "string3")
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 jestfalse
lubnil
.
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
.
Cóż, zawsze można użyć wyrażenia regularnego tutaj (ryzykując kolejną jwz cytat :)
if mystring =~ /string1|string2|string3/
...
end
wow! bardzo ładnie i precyzyjnie :) – Pavan
oh to świetnie wyjaśnić, dzięki. – Kuroun