11

指定されたキー名の配列にないキーをハッシュから削除する方法が見つかりません。exceptorを使用できることを読みsliceましたが、保持したいキー名のリストをどのようにフィードできますか? たとえば、次のハッシュがあるとします。

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

:titleそして、たとえば、、、:mediaおよびのみを保持したかった:localeLanguageのですが、指定したキー名を持つ値のみを保持するにはどうすればよいでしょうか?

4

3 に答える 3

22

私は使用しますkeep_if(1.9.2が必要です)。

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

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

#=> {:title=>"casablanca", :media=>"dvd", :localeLanguage=>"en"}      
于 2012-10-12T12:30:11.493 に答える
4

Ruby 1.9.3の場合:

entry = entry.select do |key, value|
  [:title, :media, :localeLanguage].include?(key)
end
p entry
# => {:title=>"casablanca", :media=>"dvd", :localeLanguage=>"en"}

Ruby 1.8.7では、Hash#selectは配列の配列を返すため、Hash[]を使用してその配列をハッシュに変換します。

entry = Hash[
  entry.select do |key, value|
    [:title, :media, :localeLanguage].include?(key)
  end
]
# => {:media=>"dvd", :localeLanguage=>"en", :title=>"casablanca"}

順序の違いは、Ruby 1.8.7では、ハッシュが順序付けされていないためです。

于 2012-10-12T12:18:57.337 に答える