添加一对新的哈希,我做:
{:a => 1, :b => 2}.merge!({:c => 3}) #=> {:a => 1, :b => 2, :c => 3}
是否有类似的方法从哈希中删除键?
如此:
{:a => 1, :b => 2}.reject! { |k| k == :a } #=> {:b => 2}
但我希望有这样的东西:
{:a => 1, :b => 2}.delete!(:a) #=> {:b => 2}
重要的是,返回值将是剩余的散列,所以我可以这样做:
foo(my_hash.reject! { |k| k == my_key })
在一行里。
如果你正在使用Ruby 2,你可以使用改进,而不是猴子补丁或不必要地包括大型库:
module HashExtensions
refine Hash do
def except!(*candidates)
candidates.each { |candidate| delete(candidate) }
self
end
def except(*candidates)
dup.remove!(candidates)
end
end
end
您可以在不影响程序其他部分的情况下使用此特性,也不必包含大型外部库。
class FabulousCode
using HashExtensions
def incredible_stuff
delightful_hash.except(:not_fabulous_key)
end
end
Hash#except (Ruby 3.0+)
从Ruby 3.0开始,hash# except是一个内置方法。
因此,不再需要依赖ActiveSupport或编写monkey-patches来使用它。
h = { a: 1, b: 2, c: 3 }
p h.except(:a) #=> {:b=>2, :c=>3}
来源:
除了官方Ruby文档。
链接到PR。
Ruby 3.0增加了Hash#except和ENV.except。
在哈希中删除键的多种方法。
你可以使用下面的任何方法
hash = {a: 1, b: 2, c: 3}
hash.except!(:a) # Will remove *a* and return HASH
hash # Output :- {b: 2, c: 3}
hash = {a: 1, b: 2, c: 3}
hash.delete(:a) # will remove *a* and return 1 if *a* not present than return nil
有很多方法,你可以看看Ruby doc of Hash。
谢谢你!