有一种优雅的方法可以从哈希中删除特定的键,它是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,其中排除了请求的密钥. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |