加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

有一种优雅的方法可以从哈希中删除特定的键,它是Ruby中的子哈希

发布时间:2020-12-17 03:09:25 所属栏目:百科 来源:网络整理
导读:假设我有一个可能包含哈希值的哈希值. params: { :action = "index",:controller = "home",:secret = "I love Jeff Atwood",:user = {name = "Steve",secret = "I steal Joel's pants"}} 是否有一种优雅的方式来遍历哈希并删除我遇到的所有“秘密”密钥,包括
假设我有一个可能包含哈希值的哈希值.

params: { :action => "index",:controller => "home",:secret => "I love Jeff Atwood",:user => {name => "Steve",secret => "I steal Joel's pants"}}

是否有一种优雅的方式来遍历哈希并删除我遇到的所有“秘密”密钥,包括subhashes. (哈希不受限制,因此无法预先知道哈希可能含有什么.)

我知道我能做到

params.delete(:secret)

但这不会得到’用户’哈希的秘密.

解决方法

我不认为有一个内置的方法,所以一个简单的递归方法沿着以下几行是一个解决方案:

def recursive_delete(hash,to_remove)
  hash.delete(to_remove)
  hash.each_value do |value|
    recursive_delete(value,to_remove) if value.is_a? Hash
  end
end

使用您的示例数据:

h = { :action => "index",:user => {:name => "Steve",:secret => "I steal Joel's pants"}}

recursive_delete(h,:secret)

puts h.inspect

得到:

{:controller=>"home",:user=>{:name=>"Steve"},:action=>"index"}

请注意,此解决方案可以正常工作,即它正在修改原始Hash,而不是返回一个新的Hash,其中排除了请求的密钥.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读