2010-09-09 97 views

回答

17
number.delete "A" 
number.delete "B" 
number.delete "C" 

或者,更少高性能但更简洁:

number.reject! {|k, v| %w"A B C".include? k } 
+1

第二种方法会浪费时间并影响性能 – akshay1188 2010-09-09 15:35:34

+2

它会创建新的块和数组对象,所以速度较慢并且需要更多的RAM。 – 2010-09-09 16:14:53

13

,或者比第二Chris的溶液更好的性能,但比第一较短:

%w"A B C".each{|v| number.delete(v)} 
3

ActiveSupport是Rails的一部分,它提供了几种内置方法可以帮助您实现目标。

如果你只是想删除一些键值对,您可以使用Hash#except!

number.except!(:a, :b, :c) 

如果你想保持原来的哈希值,然后使用Hash#except

new_hash = number.except!(:a, :b, :c) 

new_hash # => {:d=>4} 
number # => {:a=>1, :b=>2, :c=>3, :d=>4} 

你也可以采用无轨道的方式:

new_hash = number.dup.tap do |hash| 
    %i[a b c].each {|key| hash.delete(key)} 
end 

new_hash # => {:d=>4} 
number # => {:a=>1, :b=>2, :c=>3, :d=>4} 

P.S .:最后一个代码示例非常慢,我只是提供它作为替代。