我試圖找出是否有寫類似這樣的清潔方法:有沒有更好的方法來寫這種Ruby的條件?
if var1 == "hi" || var1 == "bye" || var1 == "well" || var1 == "hello"
puts var1
end
基本上,有一個變量,我想看看它是否等於幾個可能值之一。
我嘗試以下,但它是無效的:
if var1 == ("hi" || "bye" || "well" || "hello")
puts var1
end
我試圖找出是否有寫類似這樣的清潔方法:有沒有更好的方法來寫這種Ruby的條件?
if var1 == "hi" || var1 == "bye" || var1 == "well" || var1 == "hello"
puts var1
end
基本上,有一個變量,我想看看它是否等於幾個可能值之一。
我嘗試以下,但它是無效的:
if var1 == ("hi" || "bye" || "well" || "hello")
puts var1
end
puts var1 if %w(hi bye well hello).include? 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?
掃描陣列快得多。如果有很多事情要檢查,或者如果你一遍又一遍地檢查,這種差異可能是值得的。
通過編寫這個函數來設置[%w {hi bye well hello}]],Set只有一個值,數組本身就是這樣,代碼無法工作。也許%w {你好拜託hello} .to_set? – oldergod 2012-09-04 01:09:35
@oldergod:我想我省略了一個圖示('Set [*%w {...}]'),但'to_set'也可以。感謝您的發現。 – 2012-09-04 01:46:36
哇,真是太棒了!謝謝。對於任何未來發現這個問題的人來說,%w很難輸入到搜索引擎中,所以這裏是一個關於如何使用它們的相關問題的鏈接:http://stackoverflow.com/questions/4287503/where-in- -ruby-language-is-qw-etc-defined – jay 2012-01-12 22:22:04
實際上%w不是解決方案的關鍵部分,它只是製作數組的另一種方法。 「['hi','bye','well','hello']。include?var1」會做同樣的事情。 – jrochkind 2012-01-13 15:54:38