我有一个哈希数组:
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
,但数组中将有三个以上的哈希元素。
在另一个键的值的条件下,如何返回正确的位置?
(array.find { |h| h["John"] } || {})["place"]
或者array.find { |h| h["John"] }&.[]("place")
。&
,即安全导航操作符,如果其前面的表达式返回nil
,则整个表达式将返回nil
。&
后必须跟一个句点,因此无法使用语法糖编写Hash#[]
方法。或者,如果合适的话,可以为键:name
没有值为"John"
的哈希在数组中引发异常。 - Cary Swoveland