Tag:

如何进行递归搜索?

我有一个Task类,它可以有相同类型的子任务 public class Task { public DateTime Start { get; set;} public DateTime Finish { get; set;} public List Tasks {get; set;} public DateTime FindTaskStartDate(Task task) {} } 我应该如何执行递归搜索(也许linq)以找到具有最早开始日期的任务? 我最初的方法涉及太多的循环,它结束了一点点混乱,并迅速失控。 这是我的第二次尝试: public DateTime FindTaskStartDate(Task task) { DateTime startDate = task.Start; if(task.HasSubTasks()) { foreach (var t in task.Tasks) { if (t.Start < startDate) { startDate = […]

SQL数据层次结构

我已经查看了一些SQL层次结构教程,但它们对我的应用程序都没有多大意义。 也许我只是没有正确理解它们。 我正在编写一个C#ASP.NET应用程序,我想从SQL数据创建一个树视图层次结构。 这是层次结构的工作方式: SQL TABLE ID | 位置ID | 名称 _______ | __________ | _____________ 1331 | 1331 | 屋 1321 | 1331 | 房间 2141 | 1321 | 床 1251 | 2231 | 健身房 如果ID和位置ID相同,则将确定顶级父级。 该父母的任何子女都将拥有与父母相同的位置ID。 该孩子的任何孙子女的位置ID都等于孩子的ID,依此类推。 对于上面的例子: – 屋 – 房间 —床 任何帮助或指导易于遵循的教程将不胜感激。 编辑: 我到目前为止的代码,但只有父母和孩子,没有GrandChildren。 我似乎无法弄清楚如何让它以递归方式获取所有节点。 using System; using System.Data; using System.Collections.Generic; […]

如何引用具有数百万个节点的树中的子节点

我正在尝试构建一个树,其中每个节点可以有一个未指定数量的子节点。 该树在实践中将拥有超过一百万个节点。 我已经设法构建了树,但是当我用几千个节点填充树时,由于完整堆,我遇到了内存错误。 这是因为我试图将每个节点的子节点存储在Dictionary数据结构(或任何数据结构)中。 因此,在运行时我已经创建了数千个这样的数据结构,因为每个节点可以具有未指定数量的子节点,并且每个节点的子节点将存储在该数据结构中。 还有另一种方法吗? 我不能简单地使用变量来存储子节点的引用,因为每个节点可能有一个未指定数量的子节点。 那么,它不像二叉树,我可以有2个变量分别跟踪左孩子和右孩子。 请不要另外建议这样做的方法。 我有理由需要创建这个树,不幸的是我不能这样做。 谢谢!

存储树结构的集合是什么?

我想在组合中存储组织结构图。 我认为树数据结构最适合我的需要,因为我需要在一个节点上添加多个节点。 如果我理解正确, LinkedList只提供一个节点添加到另一个节点。 我查看了C5 treeset集合,但似乎没有Add()方法向一个节点添加2个以上的节点。 我还从Windows窗体库中查看了Treeview类,但我不想将Windows窗体dll添加到我的项目中,因为我正在构建服务层应用程序。 (还是没事?) 我不想写自己的树集合类,如果已经有第三方提供的那个? 有什么建议吗? 谢谢

如何使用Linq构建层次结构来对象?

我有一个数据结构列表: public List Personals() { return new List { new Personal { Id = 0, Name = “Name 0” }, new Personal { Id = 1, Name = “Name 1”, ParentId = 0 }, new Personal { Id = 2, Name = “Name 2”, ParentId = 0 }, new Personal { Id = 3, Name […]

通过递归检查父子关系C#来构建树类型列表

我有一个具有自身列表的类,因此它可以在树结构中表示。 我正在拉这些类的平面列表,并希望解决它。 public class Group { public int ID {get;set;} public int? ParentID {get;set;} public List Children {get;set;} } 我希望能够做到以下几点 List flatList = GetFlatList() //I CAN ALREADY DO THIS List tree = BuildTree(flatList); 如果不明显,则ParentID与其父组的ID属性相关。 编辑 关于为什么我返回列表而不是单个对象存在一些混淆。 我正在构建一个包含项目列表的UI元素,每个元素都有一个孩子。 所以初始列表没有根节点。 到目前为止,似乎所有的解决方案都不起作用。 这意味着我基本上需要使用Group类的树类型结构列表。

如何使用表达式树安全地访问可空对象的路径?

当我将反序列化的XML结果导入到xsd生成的对象树中并希望在该树abcdef中使用一些深层对象时,如果缺少该查询路径上的任何节点,它将给出exception。 if(abcdef != null) Console.Write(“ok”); 我想避免为每个级别检查null,如下所示: if(a != null) if(ab != null) if(abc != null) if(abcd != null) if(abcde != null) if(abcdef != null) Console.Write(“ok”); 第一个解决方案是实现Get扩展方法,该方法允许: if(a.Get(o=>ob).Get(o=>oc).Get(o=>od).Get(o=>oe).Get(o=>of) != null) Console.Write(“ok”); 第二个解决方案是实现Get(string)扩展方法并使用reflection来获得如下所示的结果: if(a.Get(“bcdef”) != null) Console.Write(“ok”); 第三种解决方案,可以是实现ExpandoObject并使用动态类型来获得如下所示的结果: dynamic da = new SafeExpando(a); if(da.bcdef != null) Console.Write(“ok”); 但是最后2个解决方案并没有带来强类型和智能感知的好处。 我认为最好的可能是可以用Expression Trees实现的第四个解决方案: if(Get(abcdef) != null) Console.Write(“ok”); 要么 if(a.Get(a=>abcdef) != […]