c# – 如何使用linq查询获取层次数据的深度?

c# – 如何使用linq查询获取层次数据的深度?,第1张

概述我有一个像这样的分层数据列表: var list = new List<Data>(){some data...}class Data{ public int number; public List<Data> info;} 注意:树叶中的数据 – > info = null 例: numbers是Data类的number属性 --1 --11 --2 我有一个像这样的分层数据列表:
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())));}
总结

以上是内存溢出为你收集整理的c# – 如何使用linq查询获取层次数据的深度?全部内容,希望文章能够帮你解决c# – 如何使用linq查询获取层次数据的深度?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1246050.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存