鉴于我有以下客户端哈希,是否有一个快速的ruby方式(无需编写多行脚本)来获取密钥给定我想匹配client_id?例如,如何获得密钥client_id == "2180"?
clients = {
"yellow"=>{"client_id"=>"2178"},
"orange"=>{"client_id"=>"2180"},
"red"=>{"client_id"=>"2179"},
"blue"=>{"client_id"=>"2181"}
}
Run Code Online (Sandbox Code Playgroud)
Ail*_*lyn 397
Ruby 1.9及更高版本:
hash.key(value) => key
Run Code Online (Sandbox Code Playgroud)
Ruby 1.8:
你可以用 hash.index
hsh.index(value) => key返回给定值的键.如果没有找到,则返回
nil.
h = { "a" => 100, "b" => 200 }
h.index(200) #=> "b"
h.index(999) #=> nil
所以"orange",你可以使用:
clients.key({"client_id" => "2180"})
Run Code Online (Sandbox Code Playgroud)
Dan*_*uis 170
你可以使用Enumerable #select:
clients.select{|key, hash| hash["client_id"] == "2180" }
#=> [["orange", {"client_id"=>"2180"}]]
Run Code Online (Sandbox Code Playgroud)
请注意,结果将是所有匹配值的数组,其中每个值都是键和值的数组.
bou*_*uby 22
你可以使用hashname.key(valuename)
或者,可以按顺序进行反演.new_hash = hashname.invert会给你一个new_hash让你更传统的事情.
iNe*_*cas 14
试试这个:
clients.find{|key,value| value["client_id"] == "2178"}.first
Run Code Online (Sandbox Code Playgroud)
Afz*_*ood 12
根据ruby doc http://www.ruby-doc.org/core-1.9.3/Hash.html#method-i-key key(value)是在值的基础上查找键的方法.
ROLE = {"customer" => 1, "designer" => 2, "admin" => 100}
ROLE.key(2)
Run Code Online (Sandbox Code Playgroud)
它将归还"设计师".
来自文档:
传递枚举中的每个条目以阻止.返回第一个块不为false的块.如果没有对象匹配,则调用ifnone并在指定时返回其结果,否则返回nil.
如果没有给出块,则返回枚举器.
(1..10).detect {|i| i % 5 == 0 and i % 7 == 0 } #=> nil
(1..100).detect {|i| i % 5 == 0 and i % 7 == 0 } #=> 35
Run Code Online (Sandbox Code Playgroud)
这对我有用:
clients.detect{|client| client.last['client_id'] == '2180' } #=> ["orange", {"client_id"=>"2180"}]
clients.detect{|client| client.last['client_id'] == '999999' } #=> nil
Run Code Online (Sandbox Code Playgroud)
请参阅:http: //rubydoc.info/stdlib/core/1.9.2/Enumerable#find-instance_method
| 归档时间: |
|
| 查看次数: |
211988 次 |
| 最近记录: |