使用LINQ展平樹狀結構
在軟件開發中,經常需要處理組織成樹狀結構的數據。一個常見的任務是將樹轉換為扁平列表或集合。這可以使用.NET中的語言集成查詢 (LINQ) 框架來實現。
假設我們有以下由MyNode類表示的簡單樹狀結構:
<code class="language-csharp">class MyNode { public MyNode Parent; public IEnumerable<MyNode> Elements; public int Group { get; set; } }</code>
我們得到一個IEnumerable
為了展平樹狀結構,我們可以利用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中文網其他相關文章!