我需要基于现有哈希获取新的Ruby哈希,但删除了一个元素,而不会影响原始哈希。我确定它非常简单,而且我太多的Ruby新手都没有发现它。
例如,如果我有plugh={:bar=>"bar", :baz=>"baz"}
,我希望能够执行类似xyzzy=plugh.some_magic_goes_here(:baz)
的操作并将xyzzy
设置为{:bar=>"bar"}
,而不会影响plugh
无论如何。我该怎么做?
答案 0 :(得分:6)
如果不使用有效支持,您可以执行以下操作:
xyzzy = plugh.reject { |k, _| k == :baz }
答案 1 :(得分:2)
如果您正在使用Rails(或至少使用ActiveSupport),那么except就是您想要的:
xyzzy = plugh.except(:baz)
如果您不使用Rails,则文档也包含源代码:
def except(*keys)
dup.except!(*keys)
end
def except!(*keys)
keys.each { |key| delete(key) }
self
end