[英]Recursively push the key value pair to hash with indiffernt access
我是紅寶石的新手,我正在嘗試做類似的事情,我有哈希
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
我知道我在代碼中編寫的內容將為我提供輸出,但是我將如何獲得所需的輸出? 有人可以幫忙嗎?
我們需要一個可以跟蹤鍵的堆棧
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)
輸出=>
a=>1
b,c=>3
b,d,e=>5
f=>6
g,h=>7
g,i=>8
現在,其余的只是格式化。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.