How to flatten tree via LINQ?

后端 未结 14 2507
抹茶落季
抹茶落季 2020-11-22 04:56

So I have simple tree:

class MyNode
{
 public MyNode Parent;
 public IEnumerable Elements;
 int group = 1;
}

I have a I

14条回答
  •  梦谈多话
    2020-11-22 05:50

    Here some ready to use implementation using Queue and returning the Flatten tree me first and then my children.

    public static IEnumerable Flatten(this IEnumerable items, 
        Func> getChildren)
        {
            if (items == null)
                yield break;
    
            var queue = new Queue();
    
            foreach (var item in items) {
                if (item == null)
                    continue;
    
                queue.Enqueue(item);
    
                while (queue.Count > 0) {
                    var current = queue.Dequeue();
                    yield return current;
    
                    if (current == null)
                        continue;
    
                    var children = getChildren(current);
                    if (children == null)
                        continue;
    
                    foreach (var child in children)
                        queue.Enqueue(child);
                }
            }
    
        }
    

提交回复
热议问题