我是ruby on rails的新手,我正在尝试做类似的事情, 我有哈希
hash1 = {"a"=>"1","b"=>{"c"=>"3","d"=>{"e"=>"5"}},"f"=>"6","g"=>{"h"=>"7","i"=>"8"}}
然后我使用递归方法来读取键值对,如下所示:
def traverse_hash_recursively(words)
words.each_pair do |key,value|
if value.is_a?(String)
puts "#{key}=>#{value}"
else
traverse_hash_recursively(value)
end
end
end
这样调用上面的方法:
traverse_hash_recursively(hash1)
,输出如下:
a=>1
c=>3
e=>5
f=>6
h=>7
i=>8
但这不是我想要的输出,我希望输出为
hash[a]=1
hash[b][c]=3
hash[b][d][e]=5
hash[f]=6
hash[g][h]=7
hash[g][i]=8
我知道我在代码中写的内容会给我输出的结果,但我将如何获得所需的输出? 有人可以帮忙吗?
答案 0 :(得分:0)
我们需要一个能够跟踪密钥的堆栈
def traverse_hash_recursively(keys, words)
words.each_pair do |key,value|
keys << key
if value.is_a?(String)
puts "#{keys.join(',')}=>#{value}"
keys.pop
else
traverse_hash_recursively(keys, value)
keys.pop
end
end
end
你应该用空堆栈调用该函数。
traverse_hash_recursively([], hash1)
输出=&gt;
a=>1
b,c=>3
b,d,e=>5
f=>6
g,h=>7
g,i=>8
现在,其余的只是格式化。