有没有更干净的方法来编写这种Ruby条件语句?

有没有更干净的方法来编写这种Ruby条件语句?,ruby,Ruby,我想知道是否有一种更干净的方式来写这样的东西: if var1 == "hi" || var1 == "bye" || var1 == "well" || var1 == "hello" puts var1 end 基本上,只有一个变量,我想知道它是否等于几个可能值中的一个 我尝试了以下操作,但无效: if var1 == ("hi" || "bye" || "well" || "hello") puts var1 end 将var1放入%w(你好,再见,你好)。包括吗?var1 如

我想知道是否有一种更干净的方式来写这样的东西:

if var1 == "hi" || var1 == "bye" || var1 == "well" || var1 == "hello"
  puts var1
end
基本上,只有一个变量,我想知道它是否等于几个可能值中的一个

我尝试了以下操作,但无效:

if var1 == ("hi" || "bye" || "well" || "hello")
  puts var1
end
将var1放入%w(你好,再见,你好)。包括吗?var1
如果%w(你好,再见,好,你好)则放入var1。包括吗?var1

如果列表更大,并且您要经常检查它,那么您可以通过使用哈希来节省一些时间:

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

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

构建散列或集合是一次性的,但是检查散列要比使用
include?
扫描数组快得多。如果有很多东西需要检查,或者您要反复检查,那么这种差异可能是值得的。

如果列表更大,并且您要经常检查,那么您可以通过使用哈希来节省一些时间:

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

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

构建散列或集合是一次性的,但是检查散列要比使用
include?
扫描数组快得多。如果有很多东西需要检查,或者如果你反复检查,那么这种差异可能是值得的。

哇,太神奇了!非常感谢。对于任何将来发现这个问题的人来说,在搜索引擎中键入%w是很困难的,因此这里有一个关于如何使用它们的相关问题的链接:实际上%w不是解决方案的关键部分,它只是制作数组的另一种方法。“['hi'、'bye'、'well'、'hello']”。包含?var1“也会做同样的事情。哇,太神奇了!非常感谢。对于任何将来发现这个问题的人来说,在搜索引擎中键入%w是很困难的,因此这里有一个关于如何使用它们的相关问题的链接:实际上%w不是解决方案的关键部分,它只是制作数组的另一种方法。“['hi','bye','well','hello']”。include?var1”也会做同样的事情。设置[%w{hi bye well hello}]通过编写此命令,该集仅获得一个值,即数组本身,因此代码无法工作。也许是%w{hi bye well hello}。to_set?@oldergod:我想我遗漏了一个splat(
set[*%w{…}]
),但是
to_set
也可以。感谢您发现了这一点。集合[%w{hi bye well hello}]通过编写此代码,集合仅获得一个值,即数组本身,因此代码无法工作。也许是%w{hi bye well hello}。to_set?@oldergod:我想我遗漏了一个splat(
set[*%w{…}]
),但是
to_set
也可以。谢谢你发现了。