number = {:a => 1, :b => 2, :c => 3, :d => 4}
Run Code Online (Sandbox Code Playgroud)
在评估某些条件时,我想删除a,b,c的键值对
Chr*_*ald 17
number.delete "A"
number.delete "B"
number.delete "C"
Run Code Online (Sandbox Code Playgroud)
或者,性能较差但更简洁:
number.reject! {|k, v| %w"A B C".include? k }
Run Code Online (Sandbox Code Playgroud)
Pav*_* K. 13
或者,比第二个克里斯的解决方案更高效,但比第一个更短:
%w"A B C".each{|v| number.delete(v)}
Run Code Online (Sandbox Code Playgroud)
ActiveSupport是Rails的一部分,附带了几个内置方法可以帮助您实现目标.
如果您只想删除一些键值对,可以使用Hash#除外!
number.except!(:a, :b, :c)
Run Code Online (Sandbox Code Playgroud)
如果你想保留原始哈希值,那么使用哈希#除外
new_hash = number.except!(:a, :b, :c)
new_hash # => {:d=>4}
number # => {:a=>1, :b=>2, :c=>3, :d=>4}
Run Code Online (Sandbox Code Playgroud)
您也可以使用无Rails方式:
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}
Run Code Online (Sandbox Code Playgroud)
PS:最后一个代码示例非常慢,我只是提供它作为替代.