基于单场的Treeview

时间:2012-01-26 10:07:19

标签: regex asp.net-mvc-3 c#-4.0

我有一个表,其中包含1.000行和6列。它有一个ID字段作为索引,第二个字段“Name”包含thistable中特定对象的名称。你可以猜到,名字是独一无二的。

名称类似于“Plant.Tree.Apple.Pit”或“Animal_Mammal_Dog”或任何其他非字母/非数字作为分隔符。不是一个大问题。但是我需要把这些名字分成几个单词并用这些单词来表达。因此,我的第一个例子是4个级别,我的第二个级别是深。然后需要在浏览器中向用户显示。

构建此树的最有效方法是什么?

1 个答案:

答案 0 :(得分:0)

嗯,“效率最高”通常取决于您计划如何访问数据。您只需要解析树然后将其显示给用户,就是这样吗?

在这种情况下,我想我会将它建模为一个简单的树,由Node对象组成。

您可以使用其他树结构,但它们会变得更复杂,并且这取决于您打算如何使用此数据。你是在网络服务器上构建这个树,因此需要尽可能快地避免cpu饥饿吗?你只是把它显示给用户吗?

另一种选择是将原始行转储到页面,然后编写javascript以从转储数据生成显示树。这样,客户端的webbrowser就会完成解析树并显示它的所有工作。

编辑以回答您的评论

好吧,标准树结构会起作用吗?我假设你知道如何制作一个,但以防万一:

你抓住一行,解析它的代币。从第一个令牌开始并从树的根开始,确定令牌是否是当前节点的子节点;如果是这样,请将其设置为当前节点,然后转到下一个标记。如果没有,请将其插入树中,并将其作为新的当前节点。将这些节点标记为命名空间节点。重复,直到你击中最后一个代表你的终极对象的代币。使用其参数将对象插入当前节点。

你可以用一个班级完成所有这些;让类存储节点类型(命名空间或对象),子节点列表以及当节点为object类型时对象的属性。或者你可以通过继承和转换来完成它,这样每个节点都不必拥有该对象的参数,所有命名空间节点中的声音都是null。