鉴于我有以下 clients 哈希,是否有一种快速的ruby方式(无需编写多行脚本)来获取密钥,因为我想匹配client_id?例如 . 如何获取 client_id == "2180"
的密钥?
clients = {
"yellow"=>{"client_id"=>"2178"},
"orange"=>{"client_id"=>"2180"},
"red"=>{"client_id"=>"2179"},
"blue"=>{"client_id"=>"2181"}
}
10 回答
你可以使用hashname.key(valuename)
或者,可以按顺序进行反演 .
new_hash = hashname.invert
会给你一个new_hash
,它可以让你更传统地做事 .试试这个:
根据ruby doc http://www.ruby-doc.org/core-1.9.3/Hash.html#method-i-key key(value)是在值的基础上找到键的方法 .
它将归还“设计师” .
你可以使用Enumerable#select:
请注意,结果将是所有匹配值的数组,其中每个值都是键和值的数组 .
Ruby 1.9 及更高:
Ruby 1.8 :
你可以用hash.index
所以要获得
"orange"
,你可以使用:您可以反转哈希值 .
clients.invert["client_id"=>"2180"]
返回"orange"
来自文档:
(对象?)检测(ifnone = nil){| obj | ...}
(对象?)find(ifnone = nil){| obj | ...}
(对象)检测(ifnone = nil)
(对象)查找(ifnone = nil)
传递枚举中的每个条目以阻止 . 返回第一个块不为false的块 . 如果没有对象匹配,则调用ifnone并在指定时返回其结果,否则返回nil .
如果没有给出块,则返回枚举器 .
这对我有用:
见:http://rubydoc.info/stdlib/core/1.9.2/Enumerable#find-instance_method
找到特定值的键的最佳方法是使用可用于哈希的键方法....
我希望它能解决你的问题......
我会尝试的另一种方法是使用
#map
这将返回给定值的所有出现 . 下划线意味着我们不会携带't need key'的值,以便它匹配 - 这就是为什么我把
#compact
放在最后 .下面是一个简单的方法来找到给定值的键:
...并找到给定密钥的值:
它会给你一个键值对 .