ホームページ > バックエンド開発 > C++ > LINQを使用してツリー構造を単一レベルのリストに平らにするにはどうすればよいですか?

LINQを使用してツリー構造を単一レベルのリストに平らにするにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-29 01:06:10
オリジナル
179 人が閲覧しました

How Can I Flatten a Tree Structure into a Single-Level List Using LINQ?

linqを使用してツリー構造を単一のリストに平らにします

Linqは、シングルレベルのリストで、ノードが子要素を含むデータの構造を平坦化するためのエレガントなソリューションを提供します。これにより、階層的な深さに関係なく、すべてのノードの反復が簡素化されます。

平坦化プロセス これを実現するためのLINQベースの方法は次のとおりです

この再帰関数は、ツリーを効率的に平らにします。 各ノードのすべての子供要素(

)を選択し、それらの子供を再帰的に平らにし、元のノードと平らな子供を連結することで機能します。
<code class="language-csharp">public static IEnumerable<MyNode> Flatten(this IEnumerable<MyNode> e)
{
    return e.SelectMany(c => c.Elements.Flatten()).Concat(e);
}</code>
ログイン後にコピー

フラット化されたリストのフィルタリングc.Elements

平らになった後、LINQの句を使用して、結果のリストを簡単にフィルタリングできます。たとえば、Aプロパティ値の1:

でノードを選択するには

Wheregroup強化された一般的な方法

<code class="language-csharp">IEnumerable<MyNode> filteredNodes = flattenedNodes.Where(node => node.group == 1);</code>
ログイン後にコピー
コードの透明度と再利用性の向上については、

拡張法:
  • メソッドは、

    の拡張メソッドとして最適に実装されています。これにより、コードがより読みやすく直感的になります。 FlattenIEnumerable<MyNode>ジェネリック方法:

    幅広い適用性については、一般的な拡張法を作成し、ツリー構造とノードから子孫を取得する機能を受け入れることができます。
  • この汎用バージョンは、任意の木のような構造を平坦化できます

    実用的なアプリケーション
<code class="language-csharp">public static IEnumerable<T> Flatten<T>(this IEnumerable<T> e, Func<T, IEnumerable<T>> f)
{
    return e.SelectMany(c => f(c).Flatten(f)).Concat(e);
}</code>
ログイン後にコピー

メソッドを使用するには、ツリーのルートでそれを呼び出すだけです。

この簡潔なアプローチは、複雑な階層データを効率的に管理および処理するLINQの力を活用して、木の平坦化とその後のフィルタリングのためのクリーンで保守可能なソリューションを提供します。

以上がLINQを使用してツリー構造を単一レベルのリストに平らにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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