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