2010-01-21 49 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