繁体   English   中英

如何在散列数组中搜索散列键值

[英]How to search for a hash key value in an array of hashes

我有一个哈希数组:

array = [
 {:name => "Bob" , :age => 27 , :place => "A"} ,
 {:name => "John" , :age => 50 , :place => "B"} ,
 {:name => "Alex" , :age => 80 , :place => "C"} 
]

如果:name == "John"我想获取:place的值。

但是,如果我使用

array.find {|x| x[:name] == "John"}

我得到

{:name=>"John", :age=>"27", :place=>A}

我可以用

array.second[:place]

这将返回B ,但数组将具有三个以上的 Hash 元素。

如何在另一个键的值的条件下返回正确的位置?

如果一个人需要一个方法调用,他们可能会用更早的返回来欺骗find

array.find { |h| break h[:place] if h[:name] == 'John' }
#⇒ "B"

find在您的情况下返回一个哈希值,只需传递键:place即可获取值:

hash = array.find {|x| x[:name] == "John"}
return if hash.nil?
hash[:place]

关于混合值的查询,我只是在 IRB 中尝试过,效果很好。

2.7.0 :014 > array = [
2.7.0 :015 >   {:name => "Bob" , :age => 27 , :place => "A"} ,
2.7.0 :016 >   {:name => "John" , :age => 50 , :place => "B"} ,
2.7.0 :017 >   {:name => "Alex" , :age => 80 , :place => "C"} 
2.7.0 :018 > ]
2.7.0 :019 > array.find {|x| x[:name] == "John"}
 => {:name=>"John", :age=>50, :place=>"B"} 

这将返回值:

 p array.find {|x| x[:name] == "John"}[:place]

创建一个方法并将"John"作为参数传递,以便您也可以获取其他名称的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM