Вход | Регистрация
 

Как правильно удалять элементы из массива в цикле?

Как правильно удалять элементы из массива в цикле?
Я
   jq
 
04.07.07 - 14:34
Пишу:

       Если ТипЗнч(ВыбСтрока) = Тип("Массив") Тогда
           КолвоЭлементов = ВыбСтрока.Количество();
           Индекс = 0;
           Для н = 1 По КолвоЭлементов Цикл
           
               Номенклатура     = ВыбСтрока[Индекс].Номенклатура;
               ЕдиницаИзмерения = ВыбСтрока[Индекс].ЕдиницаИзмерения;
               Цена             = ВыбСтрока[Индекс].Цена;
               Лимит            = ВыбСтрока[Индекс].Лимит;
               ВалютаЦены       = ВыбСтрока[Индекс].Валюта;
               Характеристика   = ВыбСтрока[Индекс].ХарактеристикаНоменклатуры;
               Склад            = ВыбСтрока[Индекс].Склад;
               Серия            = Справочники.СерииНоменклатуры.ПустаяСсылка();
               Качество         = ВыбСтрока[Индекс].Качество;
               
               ВыбСтрока.Удалить(Индекс);
               
               Индекс = Индекс + 1;
           КонецЦикла

После удаления выборка сбивается...
 
 
   Terv
 
1 - 04.07.07 - 14:36
        Если ТипЗнч(ВыбСтрока) = Тип("Массив") Тогда
            КолвоЭлементов = ВыбСтрока.Количество();
            Индекс = 0;
            Для н = 1 По КолвоЭлементов Цикл
                Индекс = КолвоЭлементов - н;

                Номенклатура     = ВыбСтрока[Индекс].Номенклатура;
                ЕдиницаИзмерения = ВыбСтрока[Индекс].ЕдиницаИзмерения;
                Цена             = ВыбСтрока[Индекс].Цена;
                Лимит            = ВыбСтрока[Индекс].Лимит;
                ВалютаЦены       = ВыбСтрока[Индекс].Валюта;
                Характеристика   = ВыбСтрока[Индекс].ХарактеристикаНоменклатуры;
                Склад            = ВыбСтрока[Индекс].Склад;
                Серия            = Справочники.СерииНоменклатуры.ПустаяСсылка();
                Качество         = ВыбСтрока[Индекс].Качество;
                
                ВыбСтрока.Удалить(Индекс);
                
             КонецЦикла


   Широкий
 
2 - 04.07.07 - 14:37
Если ТипЗнч(ВыбСтрока) = Тип("Массив") Тогда
            КолвоЭлементов = ВыбСтрока.Количество();
            Индекс = 0;
            Для н = 1 По КолвоЭлементов Цикл
            
                Номенклатура     = ВыбСтрока[Индекс].Номенклатура;
                ЕдиницаИзмерения = ВыбСтрока[Индекс].ЕдиницаИзмерения;
                Цена             = ВыбСтрока[Индекс].Цена;
                Лимит            = ВыбСтрока[Индекс].Лимит;
                ВалютаЦены       = ВыбСтрока[Индекс].Валюта;
                Характеристика   = ВыбСтрока[Индекс].ХарактеристикаНоменклатуры;
                Склад            = ВыбСтрока[Индекс].Склад;
                Серия            = Справочники.СерииНоменклатуры.ПустаяСсылка();
                Качество         = ВыбСтрока[Индекс].Качество;
                
                Индекс = Индекс + 1;
            КонецЦикла

            ВыбСтрока.Очистить();
   AversDik2
 
3 - 04.07.07 - 14:39
Индекс = 0;
Пока Индекс < ВыбСтрока.Количество()-1 Цикл
            
  Если НужноУдалить Тогда               
    ВыбСтрока.Удалить(Индекс);
  Иначе
    Индекс = Индекс+1;
  КонецЕси;

КонецЦикла
   jq
 
4 - 04.07.07 - 14:44
Так это получается выборка в обратном порядке???
   Terv
 
5 - 04.07.07 - 14:45
(4) ессно или см. (3)
   vs84
 
6 - 04.07.07 - 14:50
ОФФ: чем Вграница() хуже Количество()-1 ?
   AversDik2
 
7 - 04.07.07 - 14:58
(6) Много функций надо помнить.
Вграница() есть только у Массива, зато Количество() есть у всех коллекций значений.
   Lind
 
8 - 04.07.07 - 15:01
ЖКК

Удаление элементов коллекции в цикле
--------------------------------------------------------------------------------
При необходимости удаления некоторых элементов из какой-либо коллекции элементов, обладающей свойством неявного сдвига элементов при удалении (например, таблица значений, набор записей регистра и т.д.), необходимо использовать следующий алгоритм:

КолвоЭлементовКоллекции = Коллекция.Количество(); 
Для ОбратныйИндекс = 1 По КолвоЭлементовКоллекции Цикл 
     ЭлементКоллекции = Коллекция[КолвоЭлементовКоллекции - ОбратныйИндекс]; 

     Если <Условие> Тогда 
          Коллекция.Удалить(ЭлементКоллекции); 
     КонецЕсли; 

КонецЦикла; 
 

Где Коллекция – обрабатываемая коллекция элементов.
   vde69
 
9 - 04.07.07 - 16:50
предложу екзотический варинт (иногда применяю!!!):

МассивКУдалению = Новый Массив();
Для Каждого эл из ТЗ Цикл 
     Если <Условие> Тогда 
          МассивКУдалению.Добавить(Эл); 
     КонецЕсли; 
КонецЦикла; 

Для Каждого эл из МассивКУдалению Цикл 
     ТЗ.Удалить(эл);
КонецЦикла;
   TormozIT
 
10 - 04.07.07 - 17:59
(9) На самом деле самый читаемый вариант. Я за него, хотя (8) применяю в большинстве случаев =)
 
 Рекламное место пустует
   Terv
 
11 - 04.07.07 - 18:08
(10) делов вкуса, мне (9) глаза режет ... считаю, что самый читаемый и красивый, это (8) , хотя и есть более быстрые, применяю его...

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует