Xem xét các phương pháp khuyến nông sau trong C#, Traverse:Về mặt chức năng đi qua một cây trong C#
IEnumerable<T> Traverse<T>(this IEnumerable<T> source,
Func<T, IEnumerable<T>> fnRecurse);
Phương pháp này cho phép một để recurse thông qua một cây theo quy định của T và bất cứ chức năng gây T để trở subnodes của nó.
Bây giờ xem xét việc thực hiện sau đây của T:
class Node
{
public string Name;
public List<Node> Children;
}
Mục tiêu của tôi là để viết hàm ngắn nhất có thể mà sẽ trả về một IEnumerable chứa các đường dẫn đầy đủ cho tất cả các nút trong cây này. Một cái gì đó như:
var node = GetParentNode();
return node.Traverse(node => node.Children)
.Select(node => GetParentName(node) + ":" + node.Name);
Rõ ràng, việc thêm thuộc tính Gốc vào Nút làm cho vấn đề trở nên tầm thường. Thay vào đó, tôi muốn xây dựng các chuỗi phụ huynh của tôi bên trong một functor bằng cách nào đó. Tôi không nghĩ rằng điều này sẽ là quá khó trong C + + nhưng tôi không thấy làm thế nào để làm điều đó trong C#. Bất kỳ ý tưởng?
Tôi vừa nhập chính xác câu trả lời :) (Ngoại trừ bạn không cần "Có" trong C# :) –
@Tony, hãy bắt đầu với. Làm việc trong 4 ngôn ngữ mỗi ngày không tốt cho câu trả lời SO mạch lạc :) – JaredPar
@Tony, nhận xét về phong cách twitter cho bạn sẽ trông rất buồn cười khi bạn quay lại Jon – JaredPar