我經常發現自己需要遍歷層次結構對象的樹狀結構,並且在每個項目上執行操作。在列表理解方面,這種操作是否有普遍接受的名稱?我問,因爲我記得之前它已經在python的zip function之前知道它在.net框架中具有相同的功能,並且認爲它有一個不尋常的名稱。這種類型的枚舉操作是否有可接受的名稱?
下面是一些通用的方法,它們會上下搜索樹結構並在遇到它們時產生每個項目。
public static IEnumerable<T> Ancestors<T>(T source, Func<T, T> selector)
{
do
{
yield return source;
source = selector(source);
} while (!Equals(source, default(T)));
}
public static IEnumerable<T> Descendents<T>(T source,
Func<T, IEnumerable<T>> selector)
{
var stack = new Stack<T>();
stack.Push(source);
while (stack.Count > 0)
{
source = stack.Pop();
yield return source;
var items = selector(source);
if (items != null)
{
foreach (var item in items)
{
stack.Push(item);
}
}
}
}
某種過濾的樹遍歷?我不知道這是否有一個特定的名稱。我不認爲它有。 –
第二個是進行深度優先搜索。不確定第二個人是否有名字,因爲儘管根據選擇器功能它被稱爲「祖先」,但它根本不需要實際上遵循「父母」(例如,它可以做任何事情,例如選擇「最好」的孩子node) –
@George:確切地說,「祖先」意味着某種層次關係。實際上,它可以很容易地用於在任一方向上遍歷雙向鏈表或遵循任何類型的任意路徑。 –