【发布时间】:2021-06-17 22:54:35
【问题描述】:
抱歉,帖子太长了。我在面试时遇到了这个编码问题,但无法弄清楚。如果有人可以请帮助,我将不胜感激。下次会让我做好准备。 有两个类
class Emp
{
public string Name { get; set; }
public string Manager { get; set; }
}
class Roo
{
public string Name { get; set; }
public List<Roo> Children { get; set; }
}
输入数据是包含姓名及其经理的员工对象列表。由于 RH 有空管理器,它将是自顶向下输出的根。
var empList = new List<Emp>();
empList.Add(new Emp { Name = "TD", Manager = "AV" });
empList.Add(new Emp { Name = "DL", Manager = "AV" });
empList.Add(new Emp { Name = "AV", Manager = "JS" });
empList.Add(new Emp { Name = "JS", Manager = "RH" });
empList.Add(new Emp { Name = "KM", Manager = "DD" });
empList.Add(new Emp { Name = "DD", Manager = "RH" });
empList.Add(new Emp { Name = "RH", Manager = "" });
我需要将此列表转换为 Roo 类型的对象。如果员工有经理,他们就会成为经理的孩子。输出json是这样的
我的尝试如下,但递归函数有问题。有人可以帮忙吗?
var leader = empList.Where(x => x.Manager == string.Empty).FirstOrDefault();
var roo = new Roo();
var children = new List<Roo>();
roo.Name = leader.Name;
GetChildren(empList, leader.Name, ref children);
// Convert roo to Json
void GetChildren(List<Emp> empList, string name, ref List<Roo> children)
{
var list = empList.Where(x => x.Manager == name).ToList();
if (list.Any())
{
var roo = new Roo();
foreach(var l in list)
{
var newlist = empList.Where(x => x.Manager == l.Name).ToList();
if (newlist.Any())
GetChildren(newlist, l.Name, ref children);
else
{
roo = new Roo { Name = l.Name, Children = null };
children.Add(roo);
}
}
}
}
【问题讨论】:
-
是否需要递归?
-
是的。但是你有没有递归的解决方案?谢谢。
-
嗯,2 次传球。
var people = empList.ToDictionary(e => e.Name, e => new Roo {...}); foreach(var e in empList) people[e.Manager].Chilren.Add(people[e.Name]); -
@JeremyLakeman 抱歉没有看懂你的代码。我看到您正在从 empList 中转换字典。但是在创建 Roo 时,这三个...是什么? Name 和 Children 的值是什么?谢谢
-
我把它省略了,因为它应该很明显,你已经知道如何从
Emp创建一个Roo。您设置名称并可能创建一个空的子列表。
标签: c#