將路徑結構轉換為樹
從路徑字串集合中開發嵌套資料結構可能會帶來挑戰,特別是在處理指針和遞歸。讓我們研究一個從路徑結構陣列建立層次樹的解決方案。
考慮以下範例:
s:=[]string { "a/b/c", "a/b/g", "a/d" }
我們的目標是建構一個類似於以下JSON 結構的樹:
{ "name": "a", "children": [ { "name": "b", "children": [ { "name": "c", "children": [] }, { "name": "g", "children": [] } ] }, { "name": "d", "children": [] } ] }
為了實現這一點,我們實現了一個名為AddToTree 的遞歸函數,它採用現有的樹和路徑段列表。
func AddToTree(root []Node, names []string) []Node { if len(names) > 0 { var i int for i = 0; i < len(root); i++ { if root[i].Name == names[0] { //already in tree break } } if i == len(root) { root = append(root, Node{Name: names[0]}) } root[i].Children = AddToTree(root[i].Children, names[1:]) } return root }
此函數遍歷現有的樹以確定是否指定的節點已經存在。如果是,它將繼續到路徑的下一段。否則,它會建立一個具有指定名稱的新節點並將其附加到現有樹中。
Example output (note that I used omitempty on the children field, because I don't like null entries in my JSONs): [{ "name": "a", "children": [{ "name": "b", "children": [{ "name": "c" }, { "name": "g" }] }, { "name": "d" }] }]
我們的解決方案在以下關鍵方面與原始方法不同:
以上是如何從路徑字串清單建構層次樹結構?的詳細內容。更多資訊請關注PHP中文網其他相關文章!