从其键属于数组的哈希中选择键值对

时间:2016-07-06 17:05:17

标签: arrays ruby hash

我有一系列键:

keys = ["first_name", "last_name", "foo"]

和哈希:

hsh = {"first_name" => "tester", "zoo" => "loo", "foo" => "bar"}

我想提取其键存在于数组中的键值对,以获得:

res = {"first_name" => "tester", "foo" => "bar"}

有办法做到这一点吗?

5 个答案:

答案 0 :(得分:8)

hsh.slice *keys
# => {"first_name" => "tester", "foo" => "bar"}

答案 1 :(得分:4)

试试这个:

hsh.select{ |k, v| keys.include?(k) } 

答案 2 :(得分:1)

这是一种方法:

hsh.select { |k,_| k.in?(keys) }
# => {"first_name" => "tester", "foo" => "bar"}

请注意,尽管这比使用include?要短,但它取决于Rails的存在。

答案 3 :(得分:1)

调用keep_if代替select感觉更为自然:

hsh.keep_if { |key| keys.include? key }

此外,keep_if会从散列中删除不需要的对。

答案 4 :(得分:0)

您可以使用reject

hsh.reject { |k| !keys.include? k } #=> {"first_name"=>"tester", "foo"=>"bar"}