Ich habe eine LinkedList von Knoten, die jeweils eine LinkedList von Kanten speichern. Ich wollte etwas nach den LinienC#: Warum hat LinkedList keine RemoveAll-Methode, die ein Prädikat übernimmt?
nodes.RemoveAll(n => n.edges.Count == 0)
tun, aber ohne RemoveAll geht das. Ich verstehe nicht, warum es es nicht hat, da andere Sammlungen es tun. Dies müsste auch alle Elemente durchlaufen und nur eins nach dem anderen entfernen, was ich verstehe, was für eine verkettete Liste nicht schlecht wäre.
Jetzt muss ich diese stattdessen tun:
for (LinkedListNode<MyNode> n2 = nodes.First; n2 != null;)
{
LinkedListNode<MyNode> temp = n2.Next;
if (n2.Value.edges.Count == 0)
nodes.Remove(n2);
n2 = temp;
}
Während es funktioniert, es macht die Dinge scheinen komplizierter als das, was sie sind.
schon gefragt - http://stackoverflow.com/questions/133487/how-do-i-remove-elements-from-a-linkedlist-in-c-that-match- a-given-Kriterium – ChrisF
@Chri sF: Nicht ganz dasselbe - diese Frage ging nur darum, ein Element zu entfernen, nicht alle Elemente. –
Vielleicht wäre es schneller, eine neue LinkedList mit nur Edges.Count> 0 zu erstellen (anstatt all die Remove-Aktionen in der alten Liste auszuführen). Mark Byers Lösung unten tun. – Zyphrax