首頁 > 後端開發 > C++ > LINQ如何通過特定屬性弄平樹結構並過濾?

LINQ如何通過特定屬性弄平樹結構並過濾?

Mary-Kate Olsen
發布: 2025-01-29 00:56:12
原創
767 人瀏覽過

How Can LINQ Flatten a Tree Structure and Filter by a Specific Property?

使用LINQ展平樹狀結構

在軟件開發中,經常需要處理組織成樹狀結構的數據。一個常見的任務是將樹轉換為扁平列表或集合。這可以使用.NET中的語言集成查詢 (LINQ) 框架來實現。

假設我們有以下由MyNode類表示的簡單樹狀結構:

<code class="language-csharp">class MyNode
{
    public MyNode Parent;
    public IEnumerable<MyNode> Elements;
    public int Group { get; set; }
}</code>
登入後複製

我們得到一個IEnumerable,並希望獲得樹中所有節點(包括內部節點)的列表作為一個單一的扁平列表。此外,我們希望過濾此列表,只包含Group屬性等於1的節點。

為了展平樹狀結構,我們可以利用LINQ的SelectMany運算符遞歸地檢索每個節點的所有後代。下面的Flatten擴展方法獲取輸入元素並遞歸地展平它們的Elements屬性:

<code class="language-csharp">public static IEnumerable<MyNode> Flatten(this IEnumerable<MyNode> elements) =>
    elements.SelectMany(c => Flatten(c.Elements)).Concat(elements);</code>
登入後複製

為了按Group過濾展平的列表,我們可以使用Where運算符:

<code class="language-csharp">var flattenedList = treeElements.Flatten().Where(node => node.Group == 1);</code>
登入後複製

此解決方案有效且優雅地展平了樹狀結構,同時根據Group屬性過濾掉不需要的節點。

以上是LINQ如何通過特定屬性弄平樹結構並過濾?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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