如何从值数组中搜索Ruby哈希,然后根据结果返回哈希值?

时间:2015-12-03 17:05:24

标签: ruby-on-rails arrays ruby hash

这是一个示例哈希和一个用于搜索哈希的示例数组:

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" }

这样做的好方法是什么?谢谢!

2 个答案:

答案 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}