首頁 > 後端開發 > 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提供了一種優雅的解決方案,用於扁平的樹狀結構(源包含子元素的data結構),這是一個單層列表。這簡化了所有節點上的迭代,無論其分層深度如何。

扁平過程

這是一種基於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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板