获取一个删除了一个元素的Ruby哈希(非破坏性)

时间:2014-06-27 17:42:45

标签: ruby

我需要基于现有哈希获取新的Ruby哈希,但删除了一个元素,而不会影响原始哈希。我确定它非常简单,而且我太多的Ruby新手都没有发现它。

例如,如果我有plugh={:bar=>"bar", :baz=>"baz"},我希望能够执行类似xyzzy=plugh.some_magic_goes_here(:baz)的操作并将xyzzy设置为{:bar=>"bar"},而不会影响plugh无论如何。我该怎么做?

2 个答案:

答案 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