我有一个 Person 对象,它具有以下属性
public class Person
{
public string FirstName;
public string LastName;
public string TeamName;
public Person Manager;
public IEnumerable<Person> DirectReports;
}
因此,鉴于我可以通过递归循环每个人的直接报告及其直接报告等来创建人的层次结构,如下所示:
foreach (Person direct in person.DirectReports)
{
foreach (Person subDirect in direct.DirectReports)
{
etc . . .
}
}
从这些数据中,我现在正在尝试转换以生成团队的层次结构,所以我有这样的东西:
public class Team
{
public string TeamName;
public IEnumerable<Team> SubTeams;
public IEnumerable<Person> PeopleInTeam;
}
请注意,如果一个人的 directReports 可能具有或可能不具有相同的 TeamName,则人员层次结构中的人员级别数不一定与团队层次结构中的级别数相同
例如:
| 人| 家长| 队名 | | 比尔 | "" | 管理 | | 乔 | 比尔 | 管理 | | 斯科特 | 比尔 | 营销 | | 吉姆 | 比尔 | 技术 | | 马克 | 斯科特 | 营销 | | 鲍勃 | 乔 | 营销 |
所以在转换之后,我会有一个名为“管理”的团队,里面有 2 个人。SubTeams 数组中有 2 项(一项用于营销,一项用于技术)。每个团队在 SubTeams 数组中都没有条目
有效地采用这种人员层次结构并将其转换为团队层次结构的最佳方法是什么?我已经列出了下面的代码,但它似乎失败了。现在,我正在遍历每个人和他们的直接下属,并创建一个团队字典,并一次将每个人添加到一个团队中,但这似乎很慢。这是一个例子..
Dictionary<string, Team> teams = new Dictionary<string, Team>();
foreach (Person direct in person.DirectReports)
{
if (teams.ContainsKey(direct.TeamName)
{
var team = teams[direct.TeamName];
team.People.Add(direct);
}
else
{
var team = new Team(){TeamName = direct.TeamName};
team.People.Add(direct);
teams[direct.TeamName] = team;
}
foreach (Person subDirect in direct.DirectReports)
{
etc . . .
}
}