考慮在c#下面擴展方法,遍歷:功能遍歷樹在C#
IEnumerable<T> Traverse<T>(this IEnumerable<T> source,
Func<T, IEnumerable<T>> fnRecurse);
這種方法允許通過一個樹中的一個遞歸被T所定義和任何功能使噸至返回其子節點。
現在考慮下面執行的T:
class Node
{
public string Name;
public List<Node> Children;
}
我的目標是編寫最短的功能可能會返回一個IEnumerable 包含在這棵樹的每個節點的完全合格的路徑。例如:
var node = GetParentNode();
return node.Traverse(node => node.Children)
.Select(node => GetParentName(node) + ":" + node.Name);
很顯然,向Node添加Parent屬性會使問題變得微不足道。相反,我想以某種方式在函數內部構建我的父字符串。我不認爲這在C++中會太難,但我不知道如何在C#中完成它。有任何想法嗎?
我只是在輸入完全相同的答案:)(除非你不需要「用」在C#:) – 2009-11-05 17:28:37
@Tony,很好的捕捉與。每天以4種語言工作對於連貫的SO回答並不好:) – JaredPar 2009-11-05 17:29:18
@Tony,當你轉回到Jon – JaredPar 2009-11-05 17:29:53