gpt4 book ai didi

c# - 查找嵌套集合的最大深度/级别

转载 作者:行者123 更新时间:2023-11-30 16:16:27 28 4
gpt4 key购买 nike

我想创建一个可以找到嵌套树结构深度的属性。下面的静态通过递归找出深度/级别。但是是否可以将此函数作为同一个类中的属性而不是静态方法?

public static int GetDepth(MenuGroup contextMenuItems)
{
if (contextMenuItems == null || contextMenuItems.Items.Count == 0)
return 0;

var subMenu = contextMenuItems.Items.Select(b => b as MenuGroup);
if (!subMenu.Any())
return 1;

var subLevel = subMenu.Cast<MenuGroup>().Select(GetDepth);
return !subLevel.Any() ? 1 : subLevel.Max() + 1;
}

关于代码的更多信息:MenuGroupMenuItem 派生自MenuBase

MenuGroup 具有 ObservableCollection<MenuBase> Items 的子节点作为子元素

MenuItem 是一个没有任何子节点的离开节点。

最佳答案

好吧,你可以很容易地将它变成一个实例属性,是的:

public int Depth
{
get
{
if (Items.Count == 0)
return 0;
var subMenu = Items.Select(b => b as MenuGroup);
if (!subMenu.Any())
return 1;
var subLevel = subMenu.Cast<MenuGroup>().Select(x = > x.Depth);
return !subLevel.Any() ? 1 : subLevel.Max() + 1;
}
}

由于要处理非 MenuGroup 项目,这还不能完全工作,但可以使用 OfType 轻松修复而不是 Select 然后 Cast:

public int Depth
{
get
{
// Completely empty menu (not even any straight items). 0 depth.
if (Items.Count == 0)
{
return 0;
}
// We've either got items (which would give us a depth of 1) or
// items and groups, so find the maximum depth of any subgroups,
// and add 1.
return Items.OfType<MenuGroup>()
.Select(x => x.Depth)
.DefaultIfEmpty() // 0 if we have no subgroups
.Max() + 1;
}
}

关于c# - 查找嵌套集合的最大深度/级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18327761/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com