Retirer des éléments d'une list of string [Résolu]

cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - 8 août 2015 à 23:35 - Dernière réponse : Whismeril 12132 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 24 octobre 2018 Dernière intervention
- 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
Afficher la suite 

Votre réponse

6 réponses

NHenry 14281 Messages postés vendredi 14 mars 2003Date d'inscriptionModérateurStatut 23 octobre 2018 Dernière intervention - 8 août 2015 à 23:48
0
Merci
É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.
Commenter la réponse de NHenry
Whismeril 12132 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 24 octobre 2018 Dernière intervention - 9 août 2015 à 01:21
0
Merci
Bonsoir, pourquoi ne pas faire une requête qui retourne les éléments qui ne contiennent pas le substring?


Whismeril 12132 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 24 octobre 2018 Dernière intervention - 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()
Commenter la réponse de Whismeril
cs_ShayW 3238 Messages postés jeudi 26 novembre 2009Date d'inscription 14 mars 2018 Dernière intervention - Modifié par cs_ShayW le 9/08/2015 à 17:38
0
Merci
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
Commenter la réponse de cs_ShayW
Whismeril 12132 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 24 octobre 2018 Dernière intervention - 10 août 2015 à 08:46
0
Merci
Bonjour et donc ça fait ce que tu veux?
Sujet résolu?
Whismeril 12132 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 24 octobre 2018 Dernière intervention - 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
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.