将展平的数据源转换为分层数据源

时间:2010-12-17 02:17:26

标签: .net algorithm .net-3.5 datasource hierarchy

假设我有一张表格如下:

D_ID    C_ID    B_ID    A_ID
1D      1C      1B      1A
4D      2C      6B      1A
6D      1C      1B      1A
9D      1C      1B      1A
8D      2C      6B      1A

让我们说从结构上讲,我知道以下内容:

A's
 B's
  C's
   D's

这就是D的孩子,B的C,等等。

如何将表格顶部转换为分层数据源? 如

ID ParentID
1D  1C
4D  2C
6D  1C
9D  1C
8D  2C
1C  1B
2C  6B
1B  1A
6B  1A
1A  Null

这可以作为Telerik TreeView或其他分层控件的分层数据源吗? 我知道我可以迭代每个项目并自己构建它,但我想知道是否有更好的已知方法来迭代这个。也许甚至是一种内置的方式来实现这一点。

2 个答案:

答案 0 :(得分:2)

您可以编写一个简单的迭代来传递文件并将一对元素添加到字典中。在pythonish看psuedo代码:

// open the file you want to parse.
file = open(my_log_file)

// create a hash map from ID to parent.
dictionary = {}

// read through the file line by line
for line in file.getlines():
   // ignore first line ...
   // read the 4 columns in each line
   columns[] = line.split(" ")

   // add pairs (id=column[i], parent=column[i+1]) to the hashmap
   dictionary[column[1]] = column[2]
   dictionary[column[2]] = column[3]
   dictionary[column[3]] = column[4]
   dictionary[column[4]] = Nil


// output the hashmap line by line.
print "ID", "Parent ID"
for (id, parent) in dictionary:
  print id, parent

我希望这会有所帮助。

答案 1 :(得分:1)

这是一个快速思考....

如果我理解正确,你可以从右到左遍历列表,并读取对...使用字典/ map / hashtable来保持它们的有序性。您可能需要为它定义一个自定义比较器,但这并不太难。

因此,当您从右到左,从上到下进行迭代时,您可以在阅读时添加对..

parent = "1A";
child = "1B";
list.add(child, parent);
//Then on the next iteration.....
parent = "1B";
child = "1C";

等等你去......

这样使用子项作为键,您将获得所有唯一值的列表,这将成为您的ID列。

然后您的list.values()成为您的ParentID列,因为它将包含具有多个子项的所有父项的重复项。这也是孩子完美地成为关键的原因,因为你只能生一次,但你可以有很多孩子。

编辑:BAH!有人用我提出的更完整版本打败了我...哦,好吧。我更喜欢我的口头描述;)