2010-09-09 47 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 .:最後一個代碼示例非常慢,我只是提供它作爲替代。