Удаление элементов из коллекции

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
GB826
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 312
Зарегистрирован: 04.08.2005 (Чт) 0:58
Откуда: Планета #3

Удаление элементов из коллекции

Сообщение GB826 » 05.10.2005 (Ср) 14:43

Код: Выделить всё
Dim i As Long
 
  For i = 1 To tT.Count
    If tT(i).isDestroy Then tT.Remove i
  Next i


Выдает логичную ошибку, что нет такого элемента в конце, так как все сдвинулось...

А как правильно "массово" удалить элементы из коллекции с каким-либо признаком?
Пора уже всем хорошим людям собраться и убить всех плохих людей.

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 05.10.2005 (Ср) 14:55

step -1 в цикл и считать с конца или Do ... Loop

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 05.10.2005 (Ср) 15:01

Это если нужно все

Код: Выделить всё

tT.Clear

  или

  Do While tT.Count>0
     tT(tT.Count).Remove
  Loop
 
или
 
  set tT=Nothing


А если по условию, то

Код: Выделить всё

For Each colItem In tT
     If colItem.isDestroy Then
        tT.Remove(colitem.key)
     End If
  Next
Последний раз редактировалось Ruslan Demidow 05.10.2005 (Ср) 15:07, всего редактировалось 1 раз.
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

GB826
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 312
Зарегистрирован: 04.08.2005 (Чт) 0:58
Откуда: Планета #3

Сообщение GB826 » 05.10.2005 (Ср) 15:06

Нет, удалить всю коллекцию, я и сам смогу, мне нужно удалять конкретные элементы...

Код: Выделить всё
Dim i As Long
 
  For i = 1 To tT.Count
    If tT(i).isDestroy Then tT.Remove i
  Next i


В данном случае удаляются все у которых isDestroy = True
Пора уже всем хорошим людям собраться и убить всех плохих людей.

GB826
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 312
Зарегистрирован: 04.08.2005 (Чт) 0:58
Откуда: Планета #3

Сообщение GB826 » 05.10.2005 (Ср) 15:11

Код: Выделить всё
Dim i As Long
  Dim CC As Long
  CC = tT.Count
  i = 0
  Do While i < CC
   i = i + 1
   If tT(i).isDestroy Then
     tT.Remove (i)
     CC = CC - 1
    End If
  Loop


Вот чего получилось, если можно лучше и быстрее, напишите, пожалуйста
Пора уже всем хорошим людям собраться и убить всех плохих людей.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 05.10.2005 (Ср) 15:12

GB826 писал(а):Вот чего получилось, если можно лучше и быстрее, напишите, пожалуйста

Перечитай первый ответ.
Lasciate ogni speranza, voi ch'entrate.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 112

    TopList