Rozważmy następującą metodę wydłużania w C#, wprost:funkcjonalnie przechodzenie drzewa C#
IEnumerable<T> Traverse<T>(this IEnumerable<T> source,
Func<T, IEnumerable<T>> fnRecurse);
Ta metoda pozwala na przeszukanie przez drzewo określone przez T a co Funkcja powoduje T do powrotu do jego podwęzły.
Teraz rozważmy następujący realizację T:
class Node
{
public string Name;
public List<Node> Children;
}
Moim celem jest, aby napisać najkrótszą możliwą funkcję, która zwróci IEnumerable zawierającym w pełni wykwalifikowanych ścieżki dla każdego węzła w tym drzewie. Coś takiego jak:
Oczywiście dodanie właściwości Parent do węzła sprawia, że problem jest banalny. Zamiast tego chciałbym jakoś zbudować moje struny macierzyste wewnątrz funktora. Nie sądzę, byłoby to zbyt trudne w C++, ale nie widzę, jak to zrobić w języku C#. Jakieś pomysły?
Właśnie wpisałem dokładnie tę samą odpowiedź :) (Z wyjątkiem, że nie potrzebujesz "Z" w C# :) –
@ Tony, dobry połów na z. Praca w 4 językach każdego dnia nie jest dobra dla spójnych odpowiedzi SO :) – JaredPar
@ Tony, twitter style komentarze do ciebie będą wyglądać strasznie zabawnie, kiedy przełączysz się z powrotem na Jon – JaredPar