|
дерево и структура | ☑ | ||
---|---|---|---|---|
0
EverGreenMouse
29.11.17
✎
11:12
|
Собственно, имеется дерево значений с N-уровнями вложенности (читай, справочник Номенклатура).
Задача - преобразовать дерево значений в структуру структур...структур. Накидал рекурсивную функцию, но есть проблема, что не получается никак запихнуть в структуру несколько элементов одного уровня. Мож кто что подскажет по алгоритму? |
|||
1
Альбатрос
29.11.17
✎
11:13
|
Свой сначала покажи
|
|||
2
EverGreenMouse
29.11.17
✎
11:14
|
(1) Процедура ОбойтиРекурсивноСтрокиДереваНаКлиенте(Строки, Структура)
Для Каждого СтрокаДерева Из Строки Цикл Ключ = ПолучитьКлючПоНаименованию(СтрокаДерева.Код); ПодчиненныеСтроки = СтрокаДерева.ПолучитьЭлементы(); Если СтрокаДерева.Родитель = "" Тогда Структура.Вставить(Ключ); Если ПодчиненныеСтроки.Количество() > 0 Тогда ОбойтиРекурсивноСтрокиДереваНаКлиенте(ПодчиненныеСтроки,Структура); КонецЕсли; Иначе Подструктура = Новый Структура; Если СтрокаДерева.ЭтоГруппа Тогда Подструктура.Вставить(Ключ); Структура.Вставить(ПолучитьКлючПоНаименованию(СтрокаДерева.Родитель), Подструктура); Иначе Подструктура.Вставить("_"+СтрЗаменить(СтрокаДерева.Код, "-", "_")); Структура.Вставить(ПолучитьКлючПоНаименованию(СтрокаДерева.Родитель), Подструктура); КонецЕсли; Если ПодчиненныеСтроки.Количество() > 0 Тогда ОбойтиРекурсивноСтрокиДереваНаКлиенте(ПодчиненныеСтроки,Подструктура); Иначе Структура.Вставить(ПолучитьКлючПоНаименованию(СтрокаДерева.Родитель), Подструктура); КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
3
Dmitriy_76
29.11.17
✎
11:15
|
Добавить к ключу порядковый номер в структуре.
|
|||
4
EverGreenMouse
29.11.17
✎
11:16
|
(3) таааак, а зачем? :) Я и так знаю ключ верхнего уровня, проблема, что при таком обходе он по этому ключу затирает старое значение и подставляет новое
|
|||
5
Dmitriy_76
29.11.17
✎
11:17
|
(4) имена не пересекаются ?
|
|||
6
EverGreenMouse
29.11.17
✎
11:18
|
(5) тончо нет. У меня ключом выступает преобразованный код элемента справочника
|
|||
7
vdss
29.11.17
✎
11:19
|
Тебе это надо для сериализации в XML/JSON?
Тогда преобразуй в массив структур/структуру массивов |
|||
8
EverGreenMouse
29.11.17
✎
11:21
|
(7) да, JSON
Насчет массива структур или структуры массивов думал, но не могу догнать, в каком порядке формировать такой контейнер и чем это будет проще :) |
|||
9
Dmitriy_76
29.11.17
✎
11:22
|
ПодчиненныеСтроки = СтрокаДерева.ПолучитьЭлементы();
это зачем ? Может ПодчиненныеСтроки = СтрокаДерева.Строки; ? |
|||
10
EverGreenMouse
29.11.17
✎
11:24
|
(9) А разница? Массив строк получается в первом случае, во втором - коллекция строк. Для моей задачи не вижу разницы :)
|
|||
11
Dmitriy_76
29.11.17
✎
11:27
|
(10) во первом-
Описание: Получает коллекцию элементов дерева верхнего уровня. второй Содержит коллекцию строк 1-го уровня дерева значений. |
|||
12
EverGreenMouse
29.11.17
✎
11:33
|
(11) ну ок, и как это поможет?
|
|||
13
EverGreenMouse
29.11.17
✎
11:37
|
(11) как это применить в рекурсивной процедуре?
|
|||
14
Dmitriy_76
29.11.17
✎
11:39
|
(13) заменить ПолучитьЭлементы() на Строки
|
|||
15
Мыш
29.11.17
✎
11:39
|
(0) Массив структур делай. Каждая структура - один элемент справочника. Если есть элементы нижнего уровня - кидай в свойство, которое тоже массив.
|
|||
16
EverGreenMouse
29.11.17
✎
11:44
|
(15) то есть получится массив структур массивов структур и так далее?
|
|||
17
EverGreenMouse
29.11.17
✎
11:45
|
(14) Ваш К.О. :)
|
|||
18
Мыш
29.11.17
✎
11:52
|
(16) Да
|
|||
19
EverGreenMouse
29.11.17
✎
12:01
|
(18) Парсить не особо удобно будет на другой стороне. Ну ладно, попробуем :)
|
|||
20
Мыш
29.11.17
✎
12:05
|
(19) Парсится такой же рекурсией.
|
|||
21
EverGreenMouse
01.12.17
✎
16:10
|
Так я ничего и не придумал толкового. Может у кого-то есть еще свежие идеи?
|
|||
22
EverGreenMouse
01.12.17
✎
17:12
|
(21) Не, все, поплакался и сделал :) Всем спасибо))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |