パス文字列からツリー状の構造を作成する
文字列パスの配列をツリー状の構造に変換することは、特に処理する場合に困難になることがあります。再帰的なデータを使用します。この問題に対する効率的な解決策は次のとおりです。
指定されたパス配列は、ツリー内のノードへのパスを表す文字列で構成されます。必要な出力は、ノードとその子を含む階層ツリー構造です。
まず、提供されたコードを調べてみましょう。
<code class="go">func appendChild(root Node, children []string) Node { if len(children) == 1 { return Node{children[0], nil} } else { t := root t.Name=children[0] t.Children = append(t.Children, appendChild(root, children[1:])) return t } }</code>
このコードは、ツリーを再帰的に作成しようとします。問題点:
これらの問題に対処するために、修正されたコード サンプルを次に示します。
<code class="go">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 }</code>
このコードはノードのリストで動作します。単一ノードの子ではなく。ノードを挿入する前にノードがすでに存在するかどうかを確認し、入力ノードを再利用する代わりに新しいノードを作成します。さらに、必要に応じてルート ノードのリストに追加することで、指定されたパスが同じルート ノードで始まらない場合も処理します。
出力例:
[{ "name": "a", "children": [{ "name": "b", "children": [{ "name": "c" }, { "name": "g" }] }, { "name": "d" }] }]
これは改善されましたこのソリューションは、パス文字列から階層ツリー構造への効率的かつ正確な変換を提供します。
以上がパス文字列のリストをツリー状の構造に効率的に変換するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。