删除哈希中的键不在数组中

kak*_*bei 9 ruby hash

我找不到从散列中删除不在给定键名数组中的键的方法.我读过我可以使用except或者slice,但是如何向他们提供我想要保留的关键名称列表?所以,例如,如果我有这个哈希:

entry = {:title=>"casablanca", :media=>"dvd", :localeLanguage=>"en", :imdb=>"", :freebase=>"", :originalTitle => 'casablanca', :season=> '1', :episode => '3'}
Run Code Online (Sandbox Code Playgroud)

我只是想保持,比如说:title,:media:localeLanguage,我怎么能只保留其主要的名字我指定的值?

Ben*_*ier 21

在Rails 4+中,使用slice:

entry = {:title=>"casablanca", :media=>"dvd", :localeLanguage=>"en", :imdb=>"", :freebase=>"", :originalTitle => 'casablanca', :season=> '1', :episode => '3'}
keepers = [:title, :media, :localeLanguage]

entry.slice(*keepers)
# => {:title=>"casablanca", :media=>"dvd", :localeLanguage=>"en"}
Run Code Online (Sandbox Code Playgroud)

使用切片!就地修改你的哈希.


Mar*_*mas 20

我用keep_if(要求1.9.2).

keepers = [:title, :media, :localeLanguage]

entry.keep_if {|k,_| keepers.include? k }

#=> {:title=>"casablanca", :media=>"dvd", :localeLanguage=>"en"}      
Run Code Online (Sandbox Code Playgroud)