Я пытаюсь понять, как перевести таблицу, представляющую иерархические данные обратно в код.Как собрать иерархические данные из таблицы плоских отношений?
таблица настроена как таковой:
| id | parent_id | name |
|----|-----------|------|
| 1 | null | foo |
| 2 | 1 | bar |
| 3 | 1 | baz |
| 4 | 3 | bif |
| 5 | 1 | zip |
etc...
Такое, что, когда реконструировали, это выглядит следующим образом:
foo
|-bar
|-baz
|-bif
|-zip
Я изо всех сил, чтобы найти, не ужасный способ создания этого список в памяти.
В принципе, решение, к которому я пришел, просто грубо заставляет мой путь. например (в псевдо Python)
output = {}
for item in table:
parent = get_parent(item)
if parent:
if parent not in output:
output[parent] = []
output[parent_item].append(item)
Однако, это только меня достает. Он правильно закрепляет детей под их непосредственным родителем, но только один уровень вверх. Эти данные примерно на 3 уровня глубины, поэтому, я думаю, мне придется продолжать повторять это, пока я не смогу найти больше объектов с родителями.
Достаточно сказать, что мое решение плохое, хрупкое, и я не знаю, что еще делать. Каков правильный способ решить эту проблему?