簡體   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