est Liste
5 Réponses :
list.remove (t) utilise indexof et retirer (int) dans sa mise en œuvre. Alors list.removeat (int) est plus rapide.
public bool Remove(T item) { int index = this.IndexOf(item); if (index >= 0) { this.RemoveAt(index); return true; } return false; }
Mais si cela rend votre code pire ou illisible, peut aussi continuer à utiliser à distance (t).
this.indexof (item) code> Le code a un prix énorme en termes de performances car elle analyse la totalité de la matrice de support jusqu'à ce qu'elle puisse être supprimée. Spécialement lorsque l'article à supprimer est à la fin de la liste, il analyse la liste complète à chaque fois qu'une suppression est demandée. Cela a eu lieu avec moi lorsque j'essayais d'implémenter une structure de données de pile à l'aide d'une liste
list
Supprimer (t) fait entrer en interne un appel à retirer (int) Donc, faire directement une removeat est plus rapide. P>
Mais que voulez-vous atteindre? p>
En général, Envisagons simplement de trouver d'abord l'article approprié. La méthode code> Suppression code> doit rechercher la liste de l'élément correspondant à l'objet donné et est ainsi Maintenant, supprimer un élément de la fin d'une liste est toujours RemoVeat code> est plus rapide, mais pas toujours extrêmement extrêmement. p>
O (n) code> temps en général.
removeat code> sur une liste peut simplement indexer l'élément donné et est ainsi
O (1) code>. P>
O (1) code> bien sûr, mais en général retrait, un élément prend
O (n) code> temps, Parce que le remodelage doit être fait (déplacer des objets après le retrait d'une avancée). Par conséquent, dans le cas général, la complexité totale du temps pour le retrait est soit
O (n) + o (n) code> ou
O (n) + o (1) code> pour supprimer et retirer respectivement, donc simplement
o (n) code> dans les deux cas. Toutefois,
Removeat code> est garanti d'être au moins aussi rapide, bien que la mise à l'échelle est la même si vous savez que vous le retirez à / près de la fin. P>
Merci, maintenant, je comprends pourquoi MSDN dit que retirer est O (n) où n est compté-index
Utiliser Je voudrais juste créer une petite application de console pour vérifier, ce qui est plus rapide. P> system.diagnostics.stopwatch () code> p>
étant donné qu'un .NET est infecté un vecteur (ou une matrice), pas une liste liée, RemoVeat () est plus rapide. P>