c# – 从表中水合树

c# – 从表中水合树,第1张

概述我有一个包含所有节点的DataTable.他们被序列化到数据库.我想创建一个数据的对象图(分层)表示.似乎有一些方法可以做到这一点. This article describes a high order method(意味着它在完全构建树之前涉及大量的DataTable搜索) 是否有订单N方法?在我的例子中,我已经将DataTable中树的节点预先排序为有序形式.意思是,第一行显示父项的NULL @H_502_0@ @H_502_0@ 我有一个包含所有节点的Datatable.他们被序列化到数据库.我想创建一个数据的对象图(分层)表示.似乎有一些方法可以做到这一点.

This article describes a high order method(意味着它在完全构建树之前涉及大量的Datatable搜索)

是否有订单N方法?在我的例子中,我已经将Datatable中树的节点预先排序为有序形式.意思是,第一行显示父项的NulL,因为它是根.每个后续行都在in-order notation中排序.

我似乎回想起我上学时的N-Order方法.但我不记得了.

我的Datatable架构类似于:

> NodeID – int
> parentNodeID – 可以为空
>数据 – 字符串

解决方法 这是一个算法,应该做你需要它做的事情.它假设您的数据是有序的,因此它在O(n)中执行.

首先,您需要一个如下所示的节点:

class Node {    Node Parent;    List<Node> Children = new List<Node>();    int NodeID;    string Data;    public Node(NodeRow row) { ... }}

>将第一行加载为当前行.
>加载下一行;将newRow.parentNodeID与current.NodeID进行比较.
>在找到匹配项之前,请设置current = current.Parent
>将newRow添加到current.Children并将current设置为新行.
>转到第2步.

而已!如果您的数据保证结构正确,那么您将不需要进行任何额外的空检查.

样品:

Node CreateTree(IEnumerable<NodeRow> rows) {    Node root = null;    Node current = null;    foreach (var row in rows) {        // Root:        if (root == null) {             root = current = new Node(row);            continue;        }        // Traverse up the tree until the parent is found:        while (row.parentNodeID != current.NodeID) {            current = current.Parent;        }        // Add the new node as a child of the current one:        var rowNode = new Node(row);        rowNode.Parent = current;        current.Children.Add(rowNode);        current = rowNode;    }    return root;}
@H_502_0@ 总结

以上是内存溢出为你收集整理的c# – 从表中水合树全部内容,希望文章能够帮你解决c# – 从表中水合树所遇到的程序开发问题。

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

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

原文地址: https://outofmemory.cn/langs/1234063.html

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

发表评论

登录后才能评论

评论列表(0条)

保存