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:
でノードを選択するには
Where
group
強化された一般的な方法
<code class="language-csharp">IEnumerable<MyNode> filteredNodes = flattenedNodes.Where(node => node.group == 1);</code>
:
拡張法:の拡張メソッドとして最適に実装されています。これにより、コードがより読みやすく直感的になります。
Flatten
IEnumerable<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 サイトの他の関連記事を参照してください。