让我知道你从红宝石中获取关键值的方式

时间:2013-02-11 05:45:37

标签: ruby

现在我在rails上编写代码,因为必须从值中获取密钥。 但是我的代码并不像我想的那样聪明。

TYPE = {
  1 => "A", 2 => "B", 3 => "C", 4 => "D"
}

def get_key_from_value(val)
  TYPE.each do |k,v|
    if v==val
      return k
    end
  end
  nil
end 

puts get_key_from_value "B" #=> 2

因此,请让我知道如何使用值选择Ruby的Hash对象的键的最聪明的方法。

2 个答案:

答案 0 :(得分:3)

只需使用Hash#key方法:

h = {a: 1, b: 2, c: 3, d: 4}
h.key(4) # => :d

与你的例子相同:

h = {1=>"A", 2=>"B", 3=>"C", 4=>"D"}
h.key("D") # => 4

答案 1 :(得分:2)

一种可能性是使用Hash.invert

TYPE = {
  1 => "A", 2 => "B", 3 => "C", 4 => "D"
}

TYPE_INVERT = TYPE.invert #you'll probably want a better name than this

puts TYPE_INVERT['B'] #=> 2

如果你的哈希有多个具有相同值的键,你需要小心,因为你只能在反向哈希中得到其中一个。