La suppression d'une LinkedList
De la question précédente j'ai demandé, RemoveAll
est la meilleure façon de supprimer à partir d'un List<>
basé sur une condition. Curieux de savoir quelle est la meilleure façon de supprimer à partir d'un LinkedList
comme il n'y a pas de RemoveAll
fonction.
List<ItemClass> itemsToErase = new List<ItemClass>();
foreach(ItemClass itm in DS)
{
if(itm.ToBeRemoved)
itemsToErase .Add(itm);
}
foreach(ItemClass eraseItem in itemsToErase)
{
DS.Remove(eraseItem );
}
EDIT: DS est de type LinkedList<ItemClass>
OriginalL'auteur devnull | 2011-11-19
Vous devez vous connecter pour publier un commentaire.
Si vous ne pouvez pas supprimer des nœuds à partir d'un LinkedList<T> lors de l'itération avec
foreach
, vous pouvez manuellement itérer la LinkedList<T> en suivant les Prochaine de la propriété de chaque LinkedListNode<T>. Rappelez-vous juste le prochain nœud du nœud avant de l'enlever:Méthode D'Extension:
Utilisation:
Voir aussi: Les Méthodes D'Extension (Guide De Programmation C#)
Bonne idée, la méthode d'extension ajoutée.
Je suis nouvelle méthode d'extension. Pouvez-vous s'il vous plaît comment comment utiliser cette méthode d'extension pour mon cas.
OriginalL'auteur dtb
Le seul moyen de supprimer un élément de
System.Collections.Generic.LinkedList<T>
est d'utiliser l'un desRemove()
méthodes. Cependant, cette opération est plus rapide que la suppression d'un élément de formulaireList<T>
(O(1)
au lieu deO(n)
), car l'opération peut être effectuée localement. Les éléments à l'origine de l'élément supprimé n'ont pas à être déplacé, seuls les deux nœuds avant et après l'élément supprimé doivent être liés ensemble.removed.Previous.Next = removed.Next; removed.Next.Previous = removed.Previous;
. Ceci est fait en interne, depuis laPrevious
etNext
propriétés sont en lecture seule.Remove(LinkedListNode<T>)
est, en effet, O(1),Remove(T)
est O(n), car il doit trouver l'élément à supprimer en premier.OriginalL'auteur Olivier Jacot-Descombes