ホームページ  >  記事  >  バックエンド開発  >  パス文字列配列をツリー状の構造に変換するにはどうすればよいですか?

パス文字列配列をツリー状の構造に変換するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-27 04:42:29346ブラウズ

How can I convert a path string array into a tree-like structure?

パス文字列配列をツリー状構造に変換する

概要:

からツリー状構造を構築するパス文字列の配列は難しい場合がありますが、適切な手法を使用すれば効率的に達成できます。

解決策:

提供された解決策は再帰関数 AddToTree を使用します。 、ツリーの現在の状態を表すノードのリストと追加される残りのパス セグメントを入力として受け取ります。アルゴリズムは次のように進みます:

  1. 現在のパス セグメント (パスの最初の要素) が現在のルートの子ノードとして既に存在するかどうかを確認します。
  2. 見つからない場合は、作成します。現在のパス セグメントを名前として持つ新しいノードを作成し、それを現在のルートの子として追加します。
  3. 新しく作成された子ノードを新しいルートとして使用して、残りのパス セグメントに対して AddToTree を再帰的に呼び出します。

コード スニペット:

<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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。