2010-01-21 46 views
0

我該如何做這樣的事情?還是我需要一直使用IF?WHEN有可能檢查變量是否屬於數組?

ar = [["a","b"],["c"],["d","e"]] 
x = "b" 
case x 
when ar[0].include?(x) 
    puts "do something" 
when ar[1].include?(x) 
    puts "do else" 
when ar[2].include?(x) 
    puts "do a 3rd thing" 
end 

我使用Ruby 1.8.7

回答

4

這不僅是可能的,這很容易。對於恆數組:

#!/usr/bin/ruby1.8 

x = "a" 
case x 
when 'a', 'b' 
    puts "do something" # => do something 
when 'c' 
    puts "do else" 
when 'd', 'e' 
    puts "do a 3rd thing" 
end 

或者,如果數組是不是恆定的:

#!/usr/bin/ruby1.8 

ar = [["a","b"],["c"],["d","e"]] 
x = 'd' 
case x 
when *ar[0] 
    puts "do something" 
when *ar[1] 
    puts "do else" 
when *ar[2] 
    puts "do a 3rd thing" # => do a 3rd thing 
end 
1

你爲什麼不重組你的代碼了一下,做

ar = [["a","b"],["c"],["d","e"]] 
x = "b" 
i = (0...ar.length).find {|i| ar[i].include?(x)} 
case i 
    when 0 
     puts "do something" 
    when 1 
     puts "do else" 
    when 2 
     puts "do a 3rd thing" 
end 
+0

'each_with_index'將適合在這裏:'I = {ar.each_with_index | E,I |如果e.include?(x)}' – 2010-01-21 16:08:58

+0

@glenn,'each_with_index'返回整個數組。 'p [1,2] .each_with_index {| e,i |我如果e == 2}# - > [1,2]' – vava 2010-01-22 09:45:38

+0

沒錯。 '我= ar.each_with_index.find {| e,i | e.include?(x)} [1]'......對你的回答沒有太大的改進。 – 2010-01-22 17:50:31