Быстро скопировать узел дерева значений
☑
0
organizm
06.05.15
✎
15:18
Есть дерево значений. В нем находится узел. Как его скопировать другому родителю быстро? Есть вариант рекурсивно добавлять, но это в случае больших объемов тормозит обработку.
1
organizm
06.05.15
✎
15:18
вот как у меня:
Процедура РекурсивноеДобавлениеНайденногоУзла(Получатель, Источник)
Для Каждого СтрокаИсточника Из Источник.Строки Цикл
ТекущаяСтрока = Получатель.Строки.Добавить();
ЗаполнитьЗначенияСвойств(ТекущаяСтрока, СтрокаИсточника);
ТекущаяСтрока.Уровень = Получатель.Уровень()+1;
Если СтрокаИсточника.Строки.Количество() > 0 Тогда
РекурсивноеДобавлениеНайденногоУзла(ТекущаяСтрока, СтрокаИсточника);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
2
kosts
06.05.15
✎
15:27
ЗаполнитьЗначенияСвойств может слегка тормозить, попробуй свойства явно присваивать, может быть слегка ускорится...
3
organizm
06.05.15
✎
15:41
а стандартных нет методов?
4
hhhh
06.05.15
✎
15:51
(3) у дерева всего два стандартных метода: добавить и удалить. Так что губы потихоньку закатывайте.
5
DrShad
06.05.15
✎
15:56
не ну если надо извратиться, то можно конвертнуть в XML там скопировать узел и назад конвертнуть
6
organizm
06.05.15
✎
15:59
(5) о, хорошая мысля!
7
rabbidX
06.05.15
✎
16:04
(5) разве при обратной конвертации не будут рекурсивно обходиться все узлы и заполняться значения? Где профит?
8
DrShad
06.05.15
✎
16:19
через сериализатор разве не пролезет
9
МихаилМ
06.05.15
✎
16:38
ЗначениеВСтрокуВнутр будет быстрее
10
DrShad
06.05.15
✎
17:40
(9) а если это УФ?
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший