Retirer des éléments d'une list of string

Résolu
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 - 8 août 2015 à 23:35
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 - 10 août 2015 à 08:49
Bonjour

J'ai une list of string que je parcours avec une boucle for.
Mais aussi je retire de la liste tous les items contenant un substring
le bug est que la liste est modifié et le for ne plus être effectué.

  Private worddelete As String
For Each item In listwords
if ...... then
worddelete = item
listwords.RemoveAll(AddressOf Removefromlist)
End If
next

Private Function Removefromlist(str As String) As Boolean
If str.Contains(worddelete) Then
Return True
End If
Return False
End Function


Merci
A voir également:

4 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
8 août 2015 à 23:48
Évidemment, tu fais un For Each.
il faut que tu enregistre les éléments à supprimer dans une autre liste puis que tu fasse la suppression effective à la sortie de la boucle.
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
9 août 2015 à 01:21
Bonsoir, pourquoi ne pas faire une requête qui retourne les éléments qui ne contiennent pas le substring?


0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
9 août 2015 à 01:28
un truc comme ça
        Dim listeAppuree As List(Of String) = (From w In listwords
                                               Where Not w.Contains(worddelete)
                                               Select w).ToList()
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
Modifié par cs_ShayW le 9/08/2015 à 17:38
Bonjour whismeril

En fait ce que je voulais faire prend un temps fou
j'avais une liste de strings entre 100000 et 200000 strings

je parcours la liste
avec le item de la liste je verifie
si condition A je veux retirer de la liste tous les mots contenant
le item
autrement Ajouter le item dans une autre liste

J'ai mis dans une boucle while

i = 0
dim item as string
dim listret as new (of string)
while i < listwords.count
item = listwords(i)
if function1(item) then
listret.add(item)
i+=1
else
listwords = (From w In listwords
Where Not w.Contains(item)
Select w).ToList()

end if

end while


la boucle prend des heures

donc j'ai laissé tomber retirer de la liste tous les mots contenant le item

for each item in listwords
if function1(item) then
listret.add(item)
end if
next
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
10 août 2015 à 08:46
Bonjour et donc ça fait ce que tu veux?
Sujet résolu?
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
10 août 2015 à 08:49
Linq est sensé être plus rapide (j'ai vu des cas ou en fait non...)

Tu peux essayer
listret=(From w In listwords
                              Where function1(w)
                               Select w).ToList()

voir si ca va plus vite que le for each
0
Rejoignez-nous