![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jul 2012
Сообщений: 44
|
Всем привет. В общем-то вопрос наверное простой. Но для меня, как новичка, этот момент немного напряг. Можно ли удалить элемент из вектора во время цикла по этому вектору?
Получается что так делать нельзя. Но тогда как правильно? Что делать если не все элементы нужно удалить? И если не знаешь какие надо удалять пока цикл по ним не сделаешь. |
|
|||||
|
Регистрация: Jul 2012
Сообщений: 44
|
я же написал:
Что делать если не все элементы нужно удалить? И если не знаешь какие надо удалять пока цикл по ним не сделаешь. Добавлено через 1 минуту Дело в том что при splice индексы смещаются и следующий ход цикла перескакивает через элемент. delete тоже не подходит, так как пустой элемент все равно остается. |
|
|||||
|
Регистрация: Jul 2012
Сообщений: 44
|
Так не работает. Говорю еще раз: при splice индексы смещаются и следующий ход цикла перескакивает через элемент.
Если не понятно, получается такая ситуация: 1. В векторе 2 элемента. [0] = a, [1] = b. 2. for берет элемент [0] = a 3. splice удаляет [0] = a. Теперь [0] = b. 4. for ищет элемент [1], но такого уже нет. В результате [1] = b вообще не был обработан. |
|
|||||
|
Регистрация: Jul 2012
Сообщений: 44
|
Извиняюсь, тупанул. Попробую так. Хотя выглядит как-то немного костылёво. Спасибо.
|
|
|||||
|
Вызывать каждый раз splice может быть накладно.
Вот скоростной вариант: var lenght:uint = items.length; var currentIndex:uint = 0; var i:uint; var item:ItemObject; for (i = 0; i < lenght; i++) { item = items[i]; // Тут производим действия над элементом // ... if (checkItem(items[i])) //если нужно удалять { items[i] = null; continue; } // Сдвиг текущих элементов в списке, если предыдущие были удалены. if (currentIndex != i) { items[currentIndex] = item; items[i] = null; } currentIndex++; } // Обрезание списка от отработанных элементов if (lenght != currentIndex) items.length = currentIndex;
__________________
Дети не должны знать о своих родителях Последний раз редактировалось Tails; 04.04.2014 в 10:29. |
|
|||||
|
Регистрация: Jul 2012
Сообщений: 44
|
Интересный вариант. Спасибо. возьму на заметку для тяжелых мест. но пока у меня предполагается 3-4 элемента в векторе.
Добавлено через 4 минуты Хочу еще добавить аргумент против вот этой конструкции: Если indexOf вернет -1 (элемент не найден) -- то удалится последний элемент. Что неприемлемо. Так что в таком случае все равно надо использовать if |
![]() |
![]() |
Часовой пояс GMT +4, время: 18:31. |
|
|
« Предыдущая тема | Следующая тема » |
|
|