获取 self-referencing 层次结构树中的最后一个 child
Getting the last child in a self-referencing hierachical tree
我有以下类型:
public class Category
{
public string Id { get; set; }
public string ParentId { get; set; }
public string Title { get; set; }
}
顶级类别的 ParentId
值为 0。任何 child 类别都通过 ParentId
属性 与其各自的 parent 相关。
我正在尝试实现一种确定树中最后一个 child 的好方法(无论该树有多深),因此在下面的示例中,我希望 'Laptops' 条目返回(或至少它的 ID):
Id: 10 ParentId: 0 Title: For Sale
Id: 5 ParentId: 10 Title: Computers
Id: 20 ParentId: 5 Title: Laptops
即层次结构为 'For Sale' > 'Computers' > 'Laptops'.
此层次结构可能仅包含 1 个类别,或者在某些情况下可能有 5+ children。
使用 LINQ,您可以像这样简单地实现:
var LeafNodes = YourItemsList.Where(x => !YourItemsList.Any(y => y.ParentID == x.Id));
现在您可以迭代这个可枚举对象,并且对于每个项目,您可以向上遍历父节点以获得完整的链。
通过创建以父 ID 作为键的查找,您可以轻松找到给定节点的所有子节点,从而轻松找到没有任何子节点的所有节点。
var lookup = categories.ToLookup(category => category.ParentId);
var leaves = categories.Where(category => !lookup[category.Id].Any());
我有以下类型:
public class Category
{
public string Id { get; set; }
public string ParentId { get; set; }
public string Title { get; set; }
}
顶级类别的 ParentId
值为 0。任何 child 类别都通过 ParentId
属性 与其各自的 parent 相关。
我正在尝试实现一种确定树中最后一个 child 的好方法(无论该树有多深),因此在下面的示例中,我希望 'Laptops' 条目返回(或至少它的 ID):
Id: 10 ParentId: 0 Title: For Sale
Id: 5 ParentId: 10 Title: Computers
Id: 20 ParentId: 5 Title: Laptops
即层次结构为 'For Sale' > 'Computers' > 'Laptops'.
此层次结构可能仅包含 1 个类别,或者在某些情况下可能有 5+ children。
使用 LINQ,您可以像这样简单地实现:
var LeafNodes = YourItemsList.Where(x => !YourItemsList.Any(y => y.ParentID == x.Id));
现在您可以迭代这个可枚举对象,并且对于每个项目,您可以向上遍历父节点以获得完整的链。
通过创建以父 ID 作为键的查找,您可以轻松找到给定节点的所有子节点,从而轻松找到没有任何子节点的所有节点。
var lookup = categories.ToLookup(category => category.ParentId);
var leaves = categories.Where(category => !lookup[category.Id].Any());