[英]Return hash key if hash includes value in Ruby
我有一個哈希hash
像這樣:
hash = {"Addaptive Accessibility"=>["one","two"],
"Atmosphere (Feeling/Safety)"=>["three", "four"],
"Aquatics (Size)"=>["five", "six"]}
然后我有一個數組array
:
array = ["one","seven"]
我需要搜索數組中每個單詞的哈希,如果找到該單詞,則需要從哈希中返回關聯的key
。 像這樣:
array.each do |word|
if hash.include? word
puts key
end
end
我怎么寫,寫得更好?
為了回答您的原始問題,我將提出另一種我認為最容易理解的解決方案:
hash.find{|k,v| v.include? word }.first
這只會迭代直到找到匹配項,即您可能會節省幾個周期。 與@ArupRakshit的解決方案相反,這只會找到第一個匹配項。
但是,我必須強調,您確實在錯誤的方向上使用了哈希-只需翻轉鍵和值即可!
這怎么樣 ?
hash.select{ |_,v| v.any?{|e| array.include? e } }.keys
# => ["Addaptive Accessibility"]
hash.select{ |_,v| v.any?(&array.method(:include?)) }.keys
# => ["Addaptive Accessibility"]
hash.keys.select {|k| !(array & hash[k]).empty?}
array & hash[k]
是由array
和hash[k]
共同的元素組成的array
。 []
)。 (array & hash[k]).any?
,如果您再也沒有鍵false
或nil
(因為[nil, false].any?
=>錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.