![]() |
![]() |
![]() |
|
Как правильно удалять элементы из массива в цикле? | ☑ | ||
---|---|---|---|---|
0
jq
04.07.07
✎
14:34
|
Пишу:
Если ТипЗнч(ВыбСтрока) = Тип("Массив") Тогда КолвоЭлементов = ВыбСтрока.Количество(); Индекс = 0; Для н = 1 По КолвоЭлементов Цикл Номенклатура = ВыбСтрока[Индекс].Номенклатура; ЕдиницаИзмерения = ВыбСтрока[Индекс].ЕдиницаИзмерения; Цена = ВыбСтрока[Индекс].Цена; Лимит = ВыбСтрока[Индекс].Лимит; ВалютаЦены = ВыбСтрока[Индекс].Валюта; Характеристика = ВыбСтрока[Индекс].ХарактеристикаНоменклатуры; Склад = ВыбСтрока[Индекс].Склад; Серия = Справочники.СерииНоменклатуры.ПустаяСсылка(); Качество = ВыбСтрока[Индекс].Качество; ВыбСтрока.Удалить(Индекс); Индекс = Индекс + 1; КонецЦикла После удаления выборка сбивается... |
|||
1
Terv
04.07.07
✎
14:36
|
|
|||
2
Широкий
04.07.07
✎
14:37
|
Если ТипЗнч(ВыбСтрока) = Тип("Массив") Тогда
КолвоЭлементов = ВыбСтрока.Количество(); Индекс = 0; Для н = 1 По КолвоЭлементов Цикл Номенклатура = ВыбСтрока[Индекс].Номенклатура; ЕдиницаИзмерения = ВыбСтрока[Индекс].ЕдиницаИзмерения; Цена = ВыбСтрока[Индекс].Цена; Лимит = ВыбСтрока[Индекс].Лимит; ВалютаЦены = ВыбСтрока[Индекс].Валюта; Характеристика = ВыбСтрока[Индекс].ХарактеристикаНоменклатуры; Склад = ВыбСтрока[Индекс].Склад; Серия = Справочники.СерииНоменклатуры.ПустаяСсылка(); Качество = ВыбСтрока[Индекс].Качество; Индекс = Индекс + 1; КонецЦикла ВыбСтрока.Очистить(); |
|||
3
AversDik2
04.07.07
✎
14:39
|
Индекс = 0;
Пока Индекс < ВыбСтрока.Количество()-1 Цикл Если НужноУдалить Тогда ВыбСтрока.Удалить(Индекс); Иначе Индекс = Индекс+1; КонецЕси; КонецЦикла |
|||
4
jq
04.07.07
✎
14:44
|
Так это получается выборка в обратном порядке???
|
|||
5
Terv
04.07.07
✎
14:45
|
(4) ессно или см. (3)
|
|||
6
vs84
04.07.07
✎
14:50
|
ОФФ: чем Вграница() хуже Количество()-1 ?
|
|||
7
AversDik2
04.07.07
✎
14:58
|
(6) Много функций надо помнить.
Вграница() есть только у Массива, зато Количество() есть у всех коллекций значений. |
|||
8
Lind
04.07.07
✎
15:01
|
ЖКК
Удаление элементов коллекции в цикле -------------------------------------------------------------------------------- При необходимости удаления некоторых элементов из какой-либо коллекции элементов, обладающей свойством неявного сдвига элементов при удалении (например, таблица значений, набор записей регистра и т.д.), необходимо использовать следующий алгоритм: КолвоЭлементовКоллекции = Коллекция.Количество(); Для ОбратныйИндекс = 1 По КолвоЭлементовКоллекции Цикл ЭлементКоллекции = Коллекция[КолвоЭлементовКоллекции - ОбратныйИндекс]; Если <Условие> Тогда Коллекция.Удалить(ЭлементКоллекции); КонецЕсли; КонецЦикла; Где Коллекция – обрабатываемая коллекция элементов. |
|||
9
vde69
04.07.07
✎
16:50
|
предложу екзотический варинт (иногда применяю!!!):
МассивКУдалению = Новый Массив(); Для Каждого эл из ТЗ Цикл Если <Условие> Тогда МассивКУдалению.Добавить(Эл); КонецЕсли; КонецЦикла; Для Каждого эл из МассивКУдалению Цикл ТЗ.Удалить(эл); КонецЦикла; |
|||
10
TormozIT
гуру
04.07.07
✎
17:59
|
(9) На самом деле самый читаемый вариант. Я за него, хотя (8) применяю в большинстве случаев =)
|
|||
11
Terv
04.07.07
✎
18:08
|
(10) делов вкуса, мне (9) глаза режет ... считаю, что самый читаемый и красивый, это (8) , хотя и есть более быстрые, применяю его...
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |