2010-01-21 4 views
0

Как я могу сделать что-то подобное? или мне нужно использовать IF все время?Возможно ли, КОГДА проверить, принадлежит ли переменная массиву?

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 

Я использую рубин 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' будет соответствовать здесь:' я = ar.each_with_index {| е, я | i, если e.include? (x)} ' –

+0

@glenn,' each_with_index' возвращает весь массив. 'p [1, 2] .each_with_index {| e, i | i, если e == 2} # -> [1, 2] ' – vava

+0

справа. 'i = ar.each_with_index.find {| e, i | e.include? (x)} [1] '... не большое улучшение по сравнению с вашим ответом. –

 Смежные вопросы

  • Нет связанных вопросов^_^