Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取删除一个元素的Ruby哈希(非破坏性)_Ruby - Fatal编程技术网

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

获取删除一个元素的Ruby哈希(非破坏性),ruby,Ruby,我需要在现有哈希的基础上得到一个新的Ruby哈希,但要删除一个元素,并且不影响原始哈希。我相信这真的很简单,而且我是个红宝石新手,根本看不出来 例如,如果我有plugh={:bar=>“bar”,:baz=>“baz”}我希望能够做一些类似xyzy=plugh的事情。一些神奇的东西在这里(:baz)并将xyzy设置为{:bar=>“bar”}而不会以任何方式影响plugh。如何操作?如果您使用的是Rails(或至少是ActiveSupport),那么这就是您想要的: xyzzy = plugh.

我需要在现有哈希的基础上得到一个新的Ruby哈希,但要删除一个元素,并且不影响原始哈希。我相信这真的很简单,而且我是个红宝石新手,根本看不出来

例如,如果我有
plugh={:bar=>“bar”,:baz=>“baz”}
我希望能够做一些类似
xyzy=plugh的事情。一些神奇的东西在这里(:baz)
并将
xyzy
设置为
{:bar=>“bar”}
而不会以任何方式影响
plugh
。如何操作?

如果您使用的是Rails(或至少是ActiveSupport),那么这就是您想要的:

xyzzy = plugh.except(:baz)
如果您没有使用Rails,文档中还包括源代码:

def except(*keys)
  dup.except!(*keys)
end

def except!(*keys)
  keys.each { |key| delete(key) }
  self
end
如果未使用活动支持,则可以执行以下操作:

xyzzy = plugh.reject { |k, _| k == :baz }

是的,我也意识到了。答案被编辑以充实Rails为此提供的特定代码。您不需要所有的Rails。只需将ActiveSupport.store plugh存储在另一个哈希中,然后从第二个哈希中删除密钥。@ArupRakshit-首先,可怕的海盗Shawn已经建议了与您建议的内容非常相似的内容…@Urigash我只想我使用的是什-互联网连接…:-)这就是我要找的!谢谢