Tengo una Lista enlazada de nodos, cada uno almacenando una Lista enlazada de bordes. Quería hacer algo en la línea deC#: ¿Por qué LinkedList no tiene un método RemoveAll que toma un predicado?
nodes.RemoveAll(n => n.edges.Count == 0)
Pero sin RemoveTodo eso vale. No entiendo por qué no lo tiene, ya que otras colecciones sí lo tienen. Esto tendría que iterar a través de todos los elementos y eliminar solo uno a la vez de lo que yo entiendo, lo que no sería malo para una lista vinculada.
ahora tengo que hacer esto en su lugar:
for (LinkedListNode<MyNode> n2 = nodes.First; n2 != null;)
{
LinkedListNode<MyNode> temp = n2.Next;
if (n2.Value.edges.Count == 0)
nodes.Remove(n2);
n2 = temp;
}
Mientras que funciona, que hace las cosas parecen más complicadas de lo que son.
Ya se le preguntó - http://stackoverflow.com/questions/133487/how-do-i-remove-elements-from-a-linkedlist-in-c-that-match- a-given-criteria – ChrisF
@Chri sF: No es exactamente lo mismo; esa pregunta solo trataba de eliminar un elemento, no todos los elementos. –
Quizás la creación de una nueva LinkedList con solo Edges.Count> 0 sea más rápida (en lugar de hacer todas esas acciones de eliminación en la lista anterior). La solución de Mark Byers a continuación servirá. – Zyphrax