我有一系列键:
keys = ["first_name", "last_name", "foo"]
和哈希:
hsh = {"first_name" => "tester", "zoo" => "loo", "foo" => "bar"}
我想提取其键存在于数组中的键值对,以获得:
res = {"first_name" => "tester", "foo" => "bar"}
有办法做到这一点吗?
答案 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"}