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

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

Linda Hamilton
リリース: 2025-01-29 00:46:10
オリジナル
334 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート