Ruby Check条件,如果一个字符串包含多个不同的字符串?

时间:2014-05-16 06:07:15

标签: ruby-on-rails ruby

我是Ruby的新手。有没有更好的方法来写这个:

if (mystring.include? "string1") || (mystring.include? "string2") ||
   (mystring.include? "string3")

2 个答案:

答案 0 :(得分:12)

是,如下所示:

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

以下是文档:Enumerable#any?

  

将集合的每个元素传递给给定的块。如果块返回false或nil以外的值,则该方法返回true。如果没有给出块,Ruby会添加一个隐含的{ |obj| obj }块,这将导致任何?如果至少有一个集合成员不是falsenil,则返回true。

这是另一种方式(更快):

[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

请阅读Regexp::unionstr[regexp] → new_str or nil

答案 1 :(得分:3)

嗯,你总是可以在这里使用正则表达式(冒另一个jwz引用的风险:)

if mystring =~ /string1|string2|string3/
  ...
end