簡體   English   中英

遞歸地將鍵值對推入具有無差別訪問權限的哈希

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM