>使用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的子句輕鬆過濾結果列表。例如,選擇具有屬性值為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中文網其他相關文章!