c# – 如何使用linq查询获取层次数据的深度?
发布时间:2020-12-15 08:02:35 所属栏目:百科 来源:网络整理
导读:我有一个像这样的分层数据列表: var list = new ListData(){some data...}class Data{ public int number; public ListData info;} 注意:树叶中的数据 – info = null 例: numbers是Data类的number属性 --1 --11 --2 --21 --22 --23 --24 --3 --31 --32 -
我有一个像这样的分层数据列表:
var list = new List<Data>(){some data...} class Data { public int number; public List<Data> info; } 注意:树叶中的数据 – > info = null 例: numbers是Data类的number属性 --1 --11 --2 --21 --22 --23 --24 --3 --31 --32 --321 --322 --4 --41 --42 如何通过linq查询(非递归方法或for循环)知道树的最大深度到数据列表? 在此示例中,321,322的最大级别为3 谢谢. 解决方法
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()))); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容