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

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

当前回答

根据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”。

其他回答

这里有一个简单的方法来找到给定值的键:

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

    p clients.rassoc("client_id"=>"2180")

…要找到给定键的值:

    p clients.assoc("orange") 

它会给你一个键值对。

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

Ruby 1.9及更高版本:

hash.key(value) => key

Ruby 1.8:

你可以使用hash.index

Hsh.index (value) =>键 返回给定值的键。如果 未找到,返回nil。 H = {"a" => 100, "b" => 200} H.index (200) #=> "b" H.index (999) #=> nil

所以要得到"orange",你可以用:

clients.key({"client_id" => "2180"})

试试这个:

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

你可以使用hashname。key(valuename)

或者,反转也可以。New_hash = hashname。Invert会给你一个new_hash,让你做一些更传统的事情。