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

如何使用LINQ弄平樹結構並通過屬性過濾?

Patricia Arquette
發布: 2025-01-29 00:51:14
原創
235 人瀏覽過

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

使用LINQ扁平化樹形結構並按屬性過濾

在樹形數據結構領域,經常需要將層次結構轉換為扁平列表。假設您有一個具有Parent和Elements屬性的分層類MyNode,並且您希望通過將所有MyNode實例提取到單個列表中來扁平化樹。具體來說,您只對獲取group屬性等於1的節點感興趣。

以下LINQ查詢為您提供了解決方案:

<code class="language-c#">var flatList = rootNodes.SelectMany(node => Flatten(node.Elements)).Concat(rootNodes).Where(node => node.group == 1);</code>
登入後複製

以下是其工作原理:

  • SelectMany(node => Flatten(node.Elements)): 此方法遞歸地扁平化每個MyNode的Elements集合,獲得所有後代的扁平化列表。
  • Concat(rootNodes): 將後代的扁平化列表與原始MyNodes列表連接起來。
  • Where(node => node.group == 1): 過濾扁平化列表,僅包含group屬性為1的節點。

為了提高代碼的可讀性,請考慮使用擴展方法進行扁平化:

<code class="language-c#">public static IEnumerable<T> Flatten<T>(this IEnumerable<T> e, Func<T, IEnumerable<T>> f) => e.SelectMany(c => f(c).Flatten(f)).Concat(e);</code>
登入後複製

然後,使用您的樹調用擴展方法,並指定如何檢索後代:

<code class="language-c#">var flatList = tree.Flatten(node => node.Elements).Where(node => node.group == 1);</code>
登入後複製

享受使用LINQ扁平化層次數據帶來的好處!

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

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