Ruby hash delete_if很多

时间:2014-05-21 22:13:34

标签: ruby-on-rails ruby ruby-on-rails-4

Some_hash.delete_if {|key, value| key == "at" || key == "with" || key == "from"}

我刚刚包括3个,但我有一个7的列表,这条线变得非常长而且丑陋。有没有办法以较短的方式做到这一点,而不必每次都key == SOMEVALUE

3 个答案:

答案 0 :(得分:6)

SomeHash.except(:key1, :key2, ...)

Rails带有方便的Hash#except扩展名:

  

返回包含除给定键之外的所有内容的哈希。

答案 1 :(得分:3)

%w[at with from]
.each_with_object(Some_hash){|k, h| h.delete(k)}

答案 2 :(得分:3)

尝试:

keys_to_remove = ['at', 'with', 'from']
hash.delete_if {|key,_| keys_to_remove.include? key}