假设我有下面的客户哈希,是否有一个快速的ruby方法(无需编写多行脚本)来获取密钥,给定我想匹配client_id?例如:如何获取client_id ==“2180”的密钥?

clients = {
  "yellow"=>{"client_id"=>"2178"}, 
  "orange"=>{"client_id"=>"2180"}, 
  "red"=>{"client_id"=>"2179"}, 
  "blue"=>{"client_id"=>"2181"}
}

当前回答

你可以求哈希值的倒数。客户。Invert ["client_id"=>"2180"]返回"orange"

其他回答

你可以求哈希值的倒数。客户。Invert ["client_id"=>"2180"]返回"orange"

根据ruby doc, http://www.ruby-doc.org/core-1.9.3/Hash.html#method-i-key key(value)是在value的基础上找到键的方法。

ROLE = {"customer" => 1, "designer" => 2, "admin" => 100}
ROLE.key(2)

它将返回“designer”。

找到特定值的键的最佳方法是使用可用于散列....的key方法

gender = {"MALE" => 1, "FEMALE" => 2}
gender.key(1) #=> MALE

我希望它能解决你的问题…

试试这个:

clients.find{|key,value| value["client_id"] == "2178"}.first

你可以使用Enumerable#select:

clients.select{|key, hash| hash["client_id"] == "2180" }
#=> [["orange", {"client_id"=>"2180"}]]

注意,结果将是所有匹配值的数组,其中每个值都是键和值的数组。