1

现在我在 Rails 上编写代码,因为必须从 value 中获取 key。但是我的代码并不像我认为的那样聪明。

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 对象的键。

4

2 回答 2

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
于 2013-02-11T06:36:04.633 回答
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

如果您的散列具有多个具有相同值的键,则需要小心,因为您只会在倒置散列中获得其中一个。

于 2013-02-11T06:17:07.310 回答