|
Удаление строки из ТЗ по условию | ☑ | ||
---|---|---|---|---|
0
Nast
02.03.19
✎
17:53
|
Скажите, можно ли оптимизировать данный код?
Для а = -ТаблицаЗначений.Количество() + 1 по 0 Цикл Стр = ТаблицаЗначений[-а]; Если Стр.Количество = 0 Тогда ТаблицаЗначений.Удалить(Стр); КонецЕсли; КонецЦикла; |
|||
1
SleepyHead
гуру
02.03.19
✎
17:54
|
(0) Можно.
ТаблицаЗначений.Индексы.Добавить("Сумма"); МассивСтрок = ТаблицаЗначений.НайтиСтроки(Новый Структура("Сумма",0)); Для Каждого Стр из массивСтрок Цикл ТаблицаЗначений.Удалить(Стр) КонецЦикла; |
|||
2
Nast
02.03.19
✎
18:00
|
А почему так оптимальнее? НайтиСтроки() работает быстрее?
|
|||
3
Garykom
гуру
02.03.19
✎
18:01
|
Я уже заипался повторять что самое оптимальное (в среднем при обычных условиях) это не удаление строк из ТЗ.
А перенос только нужных строк в новую ТЗ из исходной! |
|||
4
Garykom
гуру
02.03.19
✎
18:02
|
Поймите что ТЗ это сложная динамическая структура на основе указателей в памяти.
И удаление строк вызывает перестройку указателей и памяти с очисткой памяти дебильными кусочками что затем требует дефрагментацию памяти сборщиком мусора. Короче берем новый кусок памяти, туда новую пустую ТЗ и заполняем ее. А старую ТЗ грохаем целиком. |
|||
5
SleepyHead
гуру
02.03.19
✎
18:08
|
ТаблицаЗначений.Колонки.Добавить("КоличествоНеНулевое", Новый ОписаниеТипов("Булево"));
Для Каждого Стр из ТаблицаЗначений Цикл Стр.КоличествоНеНулевое = (Стр.Количество <> 0); КонецЦикла; ТаблицаЗначений.Индексы.Добавить("КоличествоНеНулевое"); ТЗ = ТаблицаЗначений.Скопировать(Новый Структура("КоличествоНеНулевое", Истина); Вот так совсем православно? |
|||
6
SleepyHead
гуру
02.03.19
✎
18:09
|
(2) Ваш способ вообще ошибочный, у вас колчество строк ТЗ меняется в цикле, а цикл жестко заданы индексы. Вывалится с ошибкой.
|
|||
7
Garykom
гуру
02.03.19
✎
18:10
|
(5) Угу на больших количествах (тысячи и более) коротких строк (мало колонок) разница в скорости может быть несколько раз.
|
|||
8
Mikeware
02.03.19
✎
18:16
|
(5) заполнить добавленную колонку ложью. По индексу с нулевой суммой пробежаться и расставить истину. И копировать...
|
|||
9
jsmith82
02.03.19
✎
18:21
|
(3) во-во
|
|||
10
Nast
02.03.19
✎
18:44
|
Ваш способ вообще ошибочный, у вас колчество строк ТЗ меняется в цикле, а цикл жестко заданы индексы. Вывалится с ошибкой.
А у меня не вываливается, работает |
|||
11
Garykom
гуру
02.03.19
✎
19:12
|
(10) Это случайность что у тебя индексы по порядку идут.
Попробуй вставить строки или удалить сначала а потом проверить что будет. |
|||
12
Nast
02.03.19
✎
19:24
|
Работает все. Почему должны идти не по порядку, если перед удалением вставить строку, если берется вся таблица?
|
|||
13
Nast
02.03.19
✎
19:29
|
или вы хотите, чтобы в цикле в процессе удаления строк что-то добавлялось? В чем смысл?
|
|||
14
SleepyHead
гуру
03.03.19
✎
03:19
|
(8) нет предела совершенству ))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |