ホームページ >バックエンド開発 >C++ >LINQは、特定のプロパティ値によって階層データとフィルターを効率的に平坦化するにはどうすればよいですか?

LINQは、特定のプロパティ値によって階層データとフィルターを効率的に平坦化するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2025-01-29 01:01:09545ブラウズ

How Can LINQ Efficiently Flatten Hierarchical Data and Filter by a Specific Property Value?

linqフラットレベルデータを使用

ツリーのようなデータ構造では、ネストされたレベルからノードのフラットリストが必要になることがよくあります。たとえば、サブノードコレクションを含む「要素」属性を持つ「mynode」オブジェクトを検討します。特定の属性値を持つすべてのノードを持つフラットリストを取得するために、LINQはエレガントなソリューションを提供します。

solution

linqクエリでツリーを平らにし、特定の属性値をスクリーニングするには、以下の手順に従ってください。

以下は詳細な説明です:

<code class="language-csharp">// 扁平化树
IEnumerable<mynode> flatTree = e.SelectMany(c => Flatten(c.Elements)).Concat(new[] { e });

// 按属性值筛选扁平化列表
var result = flatTree.Where(n => n.group == 1);</code>
Flatten(c.Elements):

再帰的に元のコレクションの各ノードのサブノードのこの部分。

    concat(new [] {e}):
  • これにより、現在のノードがフラットサブノードリストに添付されます。 ここで、(n =&gt; n.group == 1):
  • この句は、「グループ」値を持つノードのみを含むフラットリストをスクリーニングします。
  • 拡張メソッドバージョン
  • コードの読みやすさを改善するために、フラット関数を拡張方法に変換できます。
  • カスタムツリーの一般的なバージョン

「mynode」とは異なるツリーの場合、このバージョンの汎用バージョンを使用してノードを取得できます。 例の例

ツリーのフラットな概念とLINQの強力な動作を理解することにより、複雑な階層構造からデータを効率的に抽出および操作できます。
<code class="language-csharp">public static IEnumerable<mynode> Flatten(this IEnumerable<mynode> e) =>
    e.SelectMany(c => c.Elements.Flatten()).Concat(e);</code>

以上がLINQは、特定のプロパティ値によって階層データとフィルターを効率的に平坦化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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