- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个具有以下属性的 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 . . .
}
}
根据这些数据,我现在正在尝试转换以生成 Teams 的层次结构,所以我有这样的东西:
public class Team
{
public string TeamName;
public IEnumerable<Team> SubTeams;
public IEnumerable<Person> PeopleInTeam;
}
请注意,如果一个人的直接下属可能具有也可能不具有相同的团队名称,那么人员层次结构中的人员级别数不一定与团队层次结构中的级别数相同
例如:
| Person| ParentPerson | TeamName | | Bill | "" | Management | | Joe | Bill | Management | | Scott | Bill | Marketing | | Jim | Bill | Technology | | Mark | Scott | Marketing || Bob | Joe | Marketing |
so after the conversion, I would have a team called "Management" with 2 people in it. It would have 2 items in the SubTeams array (one for Marketing and one for Technology). each of those teams would have no entries in the SubTeams array
What would be the best way to efficient take this hierarchy of people and convert it into a hierarchy of Teams? I have listed the code below but it seems to be failing. Right now, I am looping through each person and their direct reports and creating a dictionary of teams and adding each person at a time onto a team but it seems quite slow. here is an example ..
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 . . .
}
}
最佳答案
这是一个可以用作框架的基本解决方案。
这并不理想:特别是,Dictionary<string, string>
不是一个好的数据结构,因为无论如何我们最终都会遍历所有值。构建类似 Dictionary<string, List<string>>
的东西会更有用。从部门映射到其子部门的名称。
但它应该为您提供工作的基础。
void Main()
{
var bill = new Person { FirstName = "Bill", TeamName = "Management" };
var joe = new Person { FirstName = "Joe", Manager = bill, TeamName = "Management" };
var scott = new Person { FirstName = "Scott", Manager = bill, TeamName = "Marketing" };
var jim = new Person { FirstName = "Jim", Manager = bill, TeamName = "Technology" };
var mark = new Person { FirstName = "Mark", Manager = scott, TeamName = "Marketing" };
var bob = new Person { FirstName = "Bob", Manager = joe, TeamName = "Marketing" };
var ted = new Person { FirstName = "Ted", Manager = jim, TeamName = "IT Support" };
var people = new[] { bill, joe, scott, jim, mark, bob, ted };
var teamParents = people.Select (p => new { Team = p.TeamName, ParentTeam = p.Manager == null ? null : p.Manager.TeamName });
// don't let a team be its own parent
teamParents = teamParents.Where (p => !p.Team.Equals(p.ParentTeam));
// make sure they're all unique
teamParents = teamParents.Distinct();
// put it in a dictionary
var teamHierarchy = teamParents.ToDictionary (p => p.Team, q => q.ParentTeam);
foreach (string root in teamHierarchy.Where (h => h.Value == null).Select (h => h.Key))
{
PrintSubteams(teamHierarchy, 0, root);
}
}
private void PrintSubteams(Dictionary<string, string> hierarchy, int level, string root)
{
for (int i = 0; i < level; i++)
{
Console.Write(" ");
}
Console.WriteLine(root);
foreach (string child in hierarchy.Where (h => h.Value == root).Select(h => h.Key))
{
PrintSubteams(hierarchy, level + 1, child);
}
}
public class Person
{
public string FirstName;
public string LastName;
public string TeamName;
public Person Manager;
public IEnumerable<Person> DirectReports;
}
输出如下:
Management Marketing Technology IT Support
(我添加了 IT 支持团队以使其更有趣。)
关于c# - 从人树生成团队树的正确递归方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19074270/
$ flutter ios build --release 它显示多个可用的有效开发证书(您的选择将被保存): 但是它没有显示分发证书选择,不过我使用了--release标志,,, 我检查过我已经在本
我有一个 Jenkins Bitbucket 团队/项目工作。 在我的存储库中的 Jenkinsfile 中,我使用“git describe”来获取当前标签。 在我更新到最新的 Jenkins 版本
您会在新的 .NET 开发团队中实现哪些最佳实践和方法? 干杯 最佳答案 仅使用 Visual Studio 如果您需要数据库,请使用服务器(尽早减少 SQL 问题) 使用版本控制 关于c# - .N
我有 3 个表用户、团队、组。每个团队可以有多个组。每个组中都有一个或多个用户。用户可以属于多个组。您认为对所有用户使用组会更好吗(这样每个团队至少有一个名为所有用户的组)还是引入另一个表 team_
问题: 让我们考虑以下场景: 让T={t_1, t_2, ..., t_h}成为一组不同的游戏。每场比赛都是一对一的(它们是单人游戏)。 设n为players的个数,每个游戏都有一个已知的性能度量这个
我们有 5 个人在从事同一个项目,并且在 Bitbucket 中有多个 GIT 存储库。每个用户都有自己的 Bitbucket 帐户。我正在寻找拥有某种团队或组织功能的最佳实践方法,以便我们都可以在相
我们在实现 Team Foundation Build Server 时遇到了性能问题,而且我对如何加快速度没有任何想法。我们已经添加了一些 PropertyGroup 元素来提高几个步骤(SkipC
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 8年前关闭。 Improve this qu
我为我是所有者的团队 channel 设置了 Azure DevOps 连接器。它一直工作正常,但现在我需要调整一些设置,因为我不希望它宣布取消部署。因此,我打开连接器、已配置、AzureDevops
我们有一个团队机器人,可以在 MS 团队中发布消息。新对话的第一个事件总是一张自适应卡片,我们偶尔会用一张新卡片更新它。这一切正常,直到我用这个机器人组建了一个新团队。 我们正在尝试使用 Update
What do I need to install to activate this button Share Project in Eclipse?I need to transfer the pr
我创建了一个解决方案,其中包含我的所有项目,包括 Dotfuscator 项目和设置项目。 某些 Dotfuscator 项目仅对某些程序集进行了模糊处理,而不会影响它们的任何引用。 从 Visual
如何观察Variable来自一组团队 ( Variable ),以便每次 Game出现( Variable 由于游戏数组被修改而改变),数组 Team是否应该进行相应更新,例如比赛两支球队的得分、胜利
我的问题是我所有的应用程序 ID 都相同。我认为它们应该是不同的以识别它们。即使我尝试创建新的配置文件,它也不给我更改 ID 或生成新配置文件的选项。我正在尝试为我的一个应用程序设置 ICloud,我
熬夜工作到上午 1030 点并完成作业后,我决定在格式化并提交作业之前小睡一会儿。不用说,午睡变成了 5 小时的 sleep 时间。 醒来后,我将代码格式化为 java 的 eclipse googl
我是 3 个注册 iOS 开发团队的成员: 我的个人 iOS 开发者帐户。 我的企业 iOS 开发者客户团队。 我客户的 iOS 开发者客户团队。 我现在想使用 iOS Provisioning Po
目标:MS Teams 在双显示器上的可访问性行为,显示器设置为不同的比例,例如 100% 和 125%,分辨率为 1920*1080。我使用的工具是 Accessibility Insight。 问
最近注意到在 MS CRM 2011 中无法从工作流步骤创建/更新业务部门或团队。 为什么要制作它,是否有任何解决方法? 最佳答案 遗憾的是这是设计使然。您需要创建自定义工作流事件来创建/更新业务部门
你们这里有些奇怪。 我们有一个相当复杂的解决方案(在asp.net,silverlight,WFC,Ria Services等中分布了111个项目)解决方案,该解决方案可以在我的开发盒中正确构建(20
我们的技术总监希望测试运行后,能够在 Microsoft 团队 channel 中更新当前 testng 报告中的测试结果。 我们目前正在使用 testng 报告来分析测试运行后的报告。 我们可以将
我是一名优秀的程序员,十分优秀!