Превратите плоский источник данных в иерархический - PullRequest
1 голос
/ 17 декабря 2010

Допустим, у меня есть таблица, такая как:

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 являются потомками 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 ]

2 голосов
/ 17 декабря 2010

Вы можете написать простую итерацию, проходящую через файл и добавляющую пары элементов в словарь. В псевдо-выглядящем коде:

// 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 голос
/ 17 декабря 2010

Вот небольшая мысль ....

Если я правильно понимаю, вы можете просто перебирать список справа налево и читать пары ... Используйте словарь / карту / хеш-таблицу, чтобы сохранитьих организовали.Вам может потребоваться определить собственный компаратор для него, но это не так уж сложно.

Поэтому, когда вы выполняете итерацию справа налево, сверху вниз, вы добавляете пары по мере их чтения, так что ...

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

И так далее ...

Таким образом, используя в качестве ключа дочерний элемент, вы получаете список всех уникальных значений, который становится вашим столбцом идентификатора.

Тогда ваш list.values ​​() станет вашим столбцом ParentID, так как он будет содержать дубликаты для всех родителей, у которых было более одного ребенка.Именно поэтому ребенок прекрасно играет роль ключа, поскольку вы можете родиться только один раз, но у вас может быть много детей.

РЕДАКТИРОВАТЬ: БАХ!Кто-то побил меня этим гораздо более полной версией того, что я предлагал ... ну да ладно.Мне больше нравится мое словесное описание;)

...