首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于检索深度嵌套哈希的递归函数

用于检索深度嵌套哈希的递归函数
EN

Stack Overflow用户
提问于 2018-08-09 22:43:37
回答 1查看 54关注 0票数 0

我有以下代码:

代码语言:javascript
复制
ATTRIBUTES_TO_ANONYMIZE = [ { submitted_input: [:salutation, { user_location: [:city, :country, :full_address] }] }]

  def runner
    anonymize_data_hash(ATTRIBUTES_TO_ANONYMIZE)
  end

  def anonymize_data_hash(data, key=nil)
    if data.is_a?(Hash)
      data.each do |key, value|
        anonymize_data_hash(value, key)
      end
    elsif data.is_a?(Array)
      data.each do |value|
        anonymize_data_hash(value, key)
      end
    else
      puts "#{key}[#{data}]"
    end
  end

这将生成以下输出:

代码语言:javascript
复制
submitted_input[salutation]
user_location[city]
user_location[country]
user_location[full_address]

我真正需要的输出是:

代码语言:javascript
复制
submitted_input[salutation]
submitted_input[user_location][city]
submitted_input[user_location][country]
submitted_input[user_location][full_address]

有没有人知道我如何才能实现这个输出。任何帮助都是非常感谢的

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-09 22:57:19

在递归调用中,跟踪嵌套,而不是只转发最后一个散列中的键。

代码语言:javascript
复制
  def anonymize_data_hash(data, path=[])
    if data.is_a?(Hash)
      data.each do |key, value|
        anonymize_data_hash(value, path + [key])
      end
    elsif data.is_a?(Array)
      data.each do |value|
        anonymize_data_hash(value, path)
      end
    else
      path = path.clone
      key = path.shift
      path = (path + [data]).map{|x| "[#{x}]"}.join
      puts "#{key}#{path}"
    end
  end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51769970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档