|
Perl: обход иерархии без рекурсии
|
|||
---|---|---|---|
#18+
Сервер возвращает такую иерархическую json-структуру: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
Иерархия строится через вложения ChildObjects, глубина неограничена. Мне нужно из этой иерархии построить хеш такого вида: Код: php 1. 2. 3. 4. 5.
Через рекурсивный вызов функции я это сделал, примерно так: Код: php 1. 2. 3. 4. 5. 6. 7. 8. 9.
А можно ли обойтись без рекурсии? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.07.2018, 16:28 |
|
Perl: обход иерархии без рекурсии
|
|||
---|---|---|---|
#18+
Alibek B.А можно ли обойтись без рекурсии?Да. Любую рекурсию можно переписать на цикл. Любой цикл можно повторить рекурсией. Конкретно эту рекурсию мне переводить лень. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2018, 04:55 |
|
Perl: обход иерархии без рекурсии
|
|||
---|---|---|---|
#18+
всё можно, только структуру выбрать надо правильную гуглите nodes tree Деревья в базах данных можно хранить четырьмя основными методами: Adjacency List, Path Enumeration, Nested Set & Closure Table ( Нормальная Форма 1-2-3 ). Если кратко, то: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
они также не годятся и для комментариев/тикетов, потому что там в любых точках происходит коммент и всё остальное дерево надо пересчитывать. Если клиентов много, это будет 3.14здец. вот тут 250 слайдов про кривые ручки, а с 48 про деревья (SQL Antipattern Strike Back) (оттуда): Код: plaintext 1. 2. 3. 4. 5.
-- тут ещё описание скорости: https://demiurg.livejournal.com/53125.html?mode=reply ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2018, 08:18 |
|
Perl: обход иерархии без рекурсии
|
|||
---|---|---|---|
#18+
White OwlКонкретно эту рекурсию мне переводить лень. Я был бы признателен и за подсказку. Но я сейчас понял, что я неправильно сформулировал вопрос. Судя по упоминанию циклов, имелся ввиду проход в цикле с самодельными стеками. Например добавляем в массив (стек) элементы первого уровня, обрабатываем их, затем добавляем в массив их потомков и повторяем, пока элементы не кончатся. Если переформулировать вопрос, то я хотел спросить — есть ли в Perl встроенные механизмы или хитрости, чтобы развернуть иерархическую структуру в плоскую? Без самодельных стеков. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2018, 09:28 |
|
Perl: обход иерархии без рекурсии
|
|||
---|---|---|---|
#18+
полудухNS походу НЕ ГОДИТСЯ NS как раз мог бы подойти — потому что я не формирую иерархию, а загружаю ее извне. Но извне мне приходит уже готовая иерархия AL, поэтому нет практического смысла преобразовывать AL в NS, чтобы затем развернуть ее в плоский список. Тогда уж лучше сразу AL развернуть в список. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2018, 11:34 |
|
Perl: обход иерархии без рекурсии
|
|||
---|---|---|---|
#18+
Alibek B.Если переформулировать вопрос, то я хотел спросить — есть ли в Perl встроенные механизмы или хитрости, чтобы развернуть иерархическую структуру в плоскую? Без самодельных стеков. у перла есть CPAN, там всё уже написано, тем более на такую тему, как деревья ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2018, 12:42 |
|
|
start [/forum/topic.php?fid=23&fpage=22&tid=1460215]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
others: | 307ms |
total: | 439ms |
0 / 0 |