ホームページ >バックエンド開発 >C++ >階層のツリー構造をLINQを使用してフラットリストに平らにする方法は?

階層のツリー構造をLINQを使用してフラットリストに平らにする方法は?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-29 00:46:10371ブラウズ

How to Flatten a Hierarchical Tree Structure into a Flat List Using LINQ?

linqのフラットディスプレイの構造 クラスで表される層状のツリーデータ構造があり、それぞれが親ノード、サブノードコレクション、および識別子グループを備えていると仮定します チャレンジ

MyNode

目標は、単一のフラットリストとして、親ノードやサブノードを含むすべての

オブジェクトのリストを取得することです。ただし、結果リストにはノードのみを含める必要があります。 solution

MyNodeこのフラッテリングを達成するために、次のlinq式を使用できます。 group == 1

この表現はツリー構造全体で再帰的であり、展示は単一のリストとして平らになります。指定されたノードのすべてのサブノードを選択し、呼び出して

を再帰的に生成します。次に、このシーケンスを現在のノードに接続して、合併テーブルを生成します。 フィルター

ツリーが平らになったら、
<code class="language-csharp">IEnumerable<MyNode> Flatten(IEnumerable<MyNode> e) =>
    e.SelectMany(c => Flatten(c.Elements)).Concat(e);</code>
メソッドフィルターリストを使用して、

のノードのみを選択できます。 Flatten

追加のスタイルエンハンスメント

読みやすさを向上させるために、

メソッドは静的クラスの拡張関数として定義できます。 Where(...) group == 1実装が見つかりました

<code class="language-csharp">var result = flattenedNodes.Where(n => n.group == 1);</code>

フラットプロセスを一般化するために、一般的な拡張方法を作成できます。 このメソッドにより、各要素から子孫ノードを取得するために関数が定義されている場合、展示は階層化されたデータ構造を平らにすることができます。

この汎用タイプを実装するには、

メソッドを呼び出して、対応する関数を提供して子孫を抽出します。 Flatten

以上が階層のツリー構造をLINQを使用してフラットリストに平らにする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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