Soyez le premier à donner votre avis sur cette source.
Snippet vu 6 025 fois - Téléchargée 20 fois
dim i as integer dim j as integer For i = 0 To UBound(Tableau()) If Tableau(i) = LaValeurASupprimmer Then if UBound(Tableau())>1 and i<UBound(Tableau()) then For j = i To UBound(Tableau())-1 Tableau(j) = Tableau(j + 1) Next end if ReDim Preserve Tableau(UBound(Tableau()) - 1) Exit For End If Next i
19 août 2010 à 09:02
tout dépend de ce à quoi l'on déstine le tableau...
19 août 2010 à 09:00
je ne parlais donc pas d'une fonction intégrée quelconque.
Il est possible de faire, donc, un CopyMemory pour décaler rapidement les données.
l'astuce consistera a ne pas redimensionner le tableau tout de suite, et de le faire plus tard (possible de conserver une variable contenant le nombre d'elements du tableau)
Mais bon, il faut bien cibler la problématique, ce n'est pas si courant que cela de devoir supprimer des items d'un tableau.
19 août 2010 à 08:58
c'est garantit ! j'ai fais des tests de performance par rapport à ça, à cause d'un projet qui utilisait les tableaux de façon presque abusive ^^ le gain de temps est non négligeable
19 août 2010 à 08:53
http://www.vbfrance.com/forum/sujet-TABLEAUX-CHAINES-COPYMEMORY-QUAND-POTENCE-VOUS-GUETTE_1234952.aspx
la problématique est d'insérer une valeur mais ca se ressemble. Pour dire vrai j'avoue ne pas avoir pigé comment me servir de ces infos pour le moment.
faire un compact sur un tableau, ca non plus je ne connais pas, Renfield, si tu peux m'éclairer je suis preneur.
la méthode a Khun Dun est tentante. Mais je me demande si c'est si optimisé que ca. au moment de la suppression il n'y a pas photo. Mais au moment de la relecture du tableau, il faut ajouter un test supplémentaire à la lecture de chaque entrée. Le gain est il réel du coup?
Sehnsucht, effectivement il y a deux boucles, mais un seul parcours du tableau, il faut que je change le titre! peut tu expliquer cette ligne :
Dim index = Array.IndexOf(Of T)(source, toDelete)
et surtout a t'elle une équivalence en VB6?
si je comprend bien, elle te permet de retrouver l'index dans le tableau de la valeur a supprimer sans le parcourir.
19 août 2010 à 08:52
Private Type tInfo
Value As Integer
Tag As Integer
End Type
Private mTableau(10) As tInfo 'on peut faire un tableau variable aussi
ensuite je remplie comme d'habitude mon tableau en utilisant Tableau(Index).Value = [integer]
et lorsque je souhaite effacer une valeur, je remplie le Tag avec par exemple -1
il suffit donc, quand on lit le tableau, de lire que les Tag différents de -1
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.