在樹形數據結構領域,經常需要將層次結構轉換為扁平列表。假設您有一個具有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>
以下是其工作原理:
為了提高代碼的可讀性,請考慮使用擴展方法進行扁平化:
<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中文網其他相關文章!