通过匹配字符从散列中删除键

Delete keys from a hash by matching chars

我有一个包含几百个值的散列,其中一些是:

plays = {"week 1" => 0, "week 2" => 0, etc}

我想删除任何 key/value 对,其键中包含单词 "week"。我似乎不能用 plays.delete 做到这一点。这样做的最佳方法是什么?

你可以使用 Hash#delete_if.

play.delete_if { |k,_| /week/ ===  k }

我用过这个方法:Regexp#===

设:

plays = { "week 1" => 0, "week 2" => 0, "dog" => "woof" } 

如果不想破坏plays,使用Hash#reject:

plays.reject { |k,v| k.include?('week') }
  #=> "woof"

plays
  #=> {"week 1"=>0, "week 2"=>0, "dog"=>"woof"} 

(我最初有 k =~ /week/。我同意@sawa 的观点,在这种情况下最好避免使用正则表达式。)