我有一个这样的分层数据列表:
var list = new List<Data>(){some data...}
class Data
{
public int number;
public List<Data> info;
}
注意:树叶中的数据 -->info = null
示例:
数字是数据类的数字属性
--1
--11
--2
--21
--22
--23
--24
--3
--31
--32
--321
--322
--4
--41
--42
如何使用 linq 查询(不是递归方法或 for 循环)到数据列表来知道树的最大深度?
在此示例中,最大级别为 3,表示 321,322
谢谢。
最佳答案
LINQ 和 SQL 在平面数据结构上运行;它们不是为递归数据结构设计的。
使用 LINQ to Entities,我相信您运气不好。在每个节点中存储子树的深度,并在您插入/删除节点时递归更新它。
使用 LINQ to Objects,您可以定义一个递归扩展方法,该方法返回树中的所有路径并采用最长路径的长度:
var result = root.Paths().Max(path => path.Length);
在哪里
public static IEnumerable<Data[]> Paths(this Data data)
{
return Paths(data, new[] { data });
}
private static IEnumerable<Data[]> Paths(Data data, Data[] path)
{
return new[] { path }.Concat((data.info ?? Enumerable.Empty<Data>())
.SelectMany(child => Paths(child, path.Concat(new[] { child }).ToArray())));
}
关于c# - 如何使用 linq 查询获取层次数据的深度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10570625/