簡體   English   中英

如果哈希在Ruby中包含值,則返回哈希鍵

[英]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]是由arrayhash[k]共同的元素組成的array
  • 我們只關心這個“交集”是否為空( [] )。
  • 我們可以使用(array & hash[k]).any? ,如果您再也沒有鍵falsenil (因為[nil, false].any? =>錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM