[英]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.