gpt4 book ai didi

c# - Hierarchy List,返回轨道

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:24:20 30 4
gpt4 key购买 nike

这可能只是一些逻辑问题..或者我的设计问题当前在跟踪功能以跟踪层次结构方面存在障碍

我有一个自定义类的团队

  public class Team
{
public int PositionID;
public int? LeaderId;
public List<Team> Members = new List<Team>();
public Team(int positionid, int? leaderid)
{
PositionID = positionid;
LeaderId= leaderid;
}
}

生成的数据以树状呈现节点是一个列表

completeteams

这是我获取直接领导的函数

public static Team GetChildNode(List<Team> nodes, int seekId)
{
Team found = null;
//store leaders of leader that lead to the seek leader.
List<Team> Leaders= new List<Team>();

foreach (Team node in nodes)
{
if (found == null)
{
if (node.PositionID == seekId)
{
found = node;
return found;
}
else
{
if (node.Members.Count > 0)
{
return GetChildNode(node.Members, seekId);
}
}
}
}
return found;
}

目前返回会根据数据返回有或没有成员的团队。

在调试时我注意到上面的这个逻辑我似乎正在点击

                    return GetChildNode(node.Members, seekId);

即使在找到节点之后..

我想跟踪导航..

换句话说,这个函数正在返回我的直接领导者。

我想让直接领导者 > 领导者 > 领导者 > 直到主要领导者(领导者没有领导者)

我不介意返回一个列表,其中列表最小索引为 0 是主要领导者,最大索引是直接领导者

最佳答案

我建议为 IEnumarable 编写扩展类。

static class EnumerableExtension
{
public static IEnumerable<IEnumerable<TSt>> FindNodes<T,TSt>(this IEnumerable<T> source, Func<T, IEnumerable<T>> childrenSelector, Func<T,TSt> resultSelector, Func<T, bool> predicate)
{
var result = new List<List<TSt>>();

Action<T, List<TSt>> search = null;
search = (element, resultStruct) =>
{
resultStruct.Add(resultSelector(element));
if (predicate(element))
{
result.Add(resultStruct);
}
else
{
foreach (var item in childrenSelector(element))
{
search(item,new List<TSt>(resultStruct));
}
}
};
foreach (var v in source)
{
search(v, new List<TSt>());
}

return result;
}
}

第一个参数是团队的来源列表,第二个参数是您类型的子节点的选择器,第三个参数是结果的选择器(您要从对象中选择什么,例如liderId),第四个参数是过滤条件(liderId for例子)。它足够通用,你可以为不同的方法包装函数。用法:将带导航的 leaderId 列表返回给 leaderId 等于 100 的团队

teams.FindNodes(children => children.Members, res => res.LeaderId, con => con.LeaderId == 100);

关于c# - Hierarchy List<custom>,返回轨道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21109831/

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