是否有更简洁的方法来编写这种Ruby条件?

时间:2012-01-12 22:01:20

标签: ruby

我试图找出是否有更简洁的方式来写这样的东西:

if var1 == "hi" || var1 == "bye" || var1 == "well" || var1 == "hello"
  puts var1
end

基本上,有一个变量,我想知道它是否等于几个可能值中的一个。

我尝试了以下但是无效:

if var1 == ("hi" || "bye" || "well" || "hello")
  puts var1
end

2 个答案:

答案 0 :(得分:6)

puts var1 if %w(hi bye well hello).include? var1

答案 1 :(得分:1)

如果列表更大并且您将要进行大量检查,那么您可以使用哈希节省一些时间:

want = Hash[%w{hi bye well hello}.map { |s| [ s, true ] }]
puts var1 if(want[var1])

或Set:

want = Set[*%w{hi bye well hello}] # Or want = %w{...}.to_set
puts var1 if want.include? var1

构建哈希或集合是一次性命中,但检查哈希比使用include?扫描数组要快得多。如果有很多事情需要检查,或者你一遍又一遍地检查,差异可能是值得的。