我有以下代码:
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这将生成以下输出:
submitted_input[salutation]
user_location[city]
user_location[country]
user_location[full_address]我真正需要的输出是:
submitted_input[salutation]
submitted_input[user_location][city]
submitted_input[user_location][country]
submitted_input[user_location][full_address]有没有人知道我如何才能实现这个输出。任何帮助都是非常感谢的
发布于 2018-08-09 22:57:19
在递归调用中,跟踪嵌套,而不是只转发最后一个散列中的键。
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
endhttps://stackoverflow.com/questions/51769970
复制相似问题