如何通過LINQ將樹夷為平地?所以我有一棵簡單的樹:class MyNode{
public MyNode Parent;
public IEnumerable<MyNode> Elements;
int group = 1;}我有一個IEnumerable<MyNode>..我想要一份清單MyNode(包括內(nèi)部節(jié)點對象(Elements)作為一個單一清單Where group == 1..如何通過LINQ做這樣的事情?
3 回答

縹緲止盈
TA貢獻(xiàn)2041條經(jīng)驗 獲得超4個贊
IEnumerable<MyNode> Flatten(IEnumerable<MyNode> e) { return e.SelectMany(c => Flatten(c.Elements)).Concat(new[] {e});}
group
Where(...)
.
Flatten
public static IEnumerable<MyNode> Flatten(this IEnumerable<MyNode> e) { return e.SelectMany(c => c.Elements.Flatten()).Concat(e);}
Flatten
public static IEnumerable<T> Flatten<T>( this IEnumerable<T> e, Func<T,IEnumerable<T>> f) { return e.SelectMany(c => f(c).Flatten(f)).Concat(e);}
IEnumerable<MyNode> tree = ....var res = tree.Flatten(node => node.Elements);
Concat(...)
.

手掌心
TA貢獻(xiàn)1942條經(jīng)驗 獲得超3個贊
public static IEnumerable<T> Flatten<T>( this IEnumerable<T> items, Func<T, IEnumerable<T>> getChildren) { var stack = new Stack<T>(); foreach(var item in items) stack.Push(item); while(stack.Count > 0) { var current = stack.Pop(); yield return current; var children = getChildren(current); if (children == null) continue; foreach (var child in children) stack.Push(child); } }
- 3 回答
- 0 關(guān)注
- 436 瀏覽
添加回答
舉報
0/150
提交
取消