パス文字列配列からツリー状構造を構築する方法
概要:
ファイル パスを表す文字列の配列を使用して、ディレクトリ階層を反映するツリー状のデータ構造を構築することを目指します。配列内の各文字列は、ルート ディレクトリから特定のファイルまたはディレクトリへの完全なパスを表します。
子リストを使用した再帰的アプローチ:
ツリーを再帰的に構築するには、以下を行う必要があります。パス文字列を左から右にたどり、コンポーネントに分割します。名前を持つ Node 構造体と子ノードのスライスを使用してツリーを表すことができます。
<code class="go">type Node struct { Name string Children []Node }</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>
例:
入力パス文字列の場合:
<code class="go">s := [...]string{"a/b/c", "a/b/g", "a/d"}</code>
関数 AddToTree は次のツリー構造を生成します:
<code class="json">{ "name": "a", "children": [ { "name": "b", "children": [ { "name": "c" }, { "name": "g" } ] }, { "name": "d", "children": [] } ] }</code>
元のアプローチと比べた利点:
以上がファイル システムの階層を表すパス文字列の配列からツリー状の構造を効率的に構築するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。