Можно ли при проверке, если переменная принадлежит массиву? - PullRequest
0 голосов
/ 21 января 2010

Как я могу сделать что-то подобное? или мне нужно использовать 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

Я использую ruby ​​1.8.7

Ответы [ 2 ]

4 голосов
/ 21 января 2010

Это не только возможно, это просто. Для постоянных массивов:

#!/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 голос
/ 21 января 2010

Почему бы вам немного не реструктурировать свой код и не сделать

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
...