这是一个示例哈希和一个用于搜索哈希的示例数组:
nicknames = { "Black Mamba" => "Kobe Bryant",
"Half Man Half Amazing" => "Vince Carter",
"The Big Fundamental" => "Tim Duncan",
"Big Ticket" => "Kevin Garnett",
"Obi-Wan Ginobili" => "Manu Ginobili",
"The Answer" => "Allen Iverson" }
names = [ "Vince Carter", "Manu Ginobili", "Allen Iverson" ]
我想回来:
selected = { "Half Man Half Amazing" => "Vince Carter", "Obi-Wan Ginobili" => "Manu Ginobili", "The Answer" = "Allen Iverson" }
这样做的好方法是什么?谢谢!
答案 0 :(得分:7)
您可以执行以下操作:
nicknames.select { |key, value| names.include?(value) }
(将您提供的代码复制粘贴到我的IRB控制台中,您将看到它正常工作)。
答案 1 :(得分:3)
如果散列中的值是唯一的,则可以反转键和值。 MrYoshiji的代码有效,但这是一种更有效的方式。
hash = nicknames.invert
names.to_enum.with_object({}){|k, h| h[hash[k]] = k}