나는 각각 Linked Edge의 가장자리를 저장하는 LinkedList 노드를 가지고있다.C# : LinkedList에 술어를 사용하는 RemoveAll 메서드가없는 이유는 무엇입니까?
nodes.RemoveAll(n => n.edges.Count == 0)
줄을 따라 무언가를하고 싶었지만 RemoveAll을 사용하지 않았다. 나는 왜 다른 컬렉션이 그것을 가지고 있기 때문에 그것을 가지고 있지 않은지 이해하지 못한다. 이렇게하면 모든 요소를 반복해야하고, 이해할 수있는 항목을 한 번에 하나씩 제거해야합니다. 링크드리스트의 경우 성능면에서 좋지 않을 것입니다.
지금 내가 대신 이렇게해야합니다 : 그것은 작동하지만, 그것은 일을 그들이 무엇보다 복잡 보일 수
for (LinkedListNode<MyNode> n2 = nodes.First; n2 != null;)
{
LinkedListNode<MyNode> temp = n2.Next;
if (n2.Value.edges.Count == 0)
nodes.Remove(n2);
n2 = temp;
}
.
이미 요청 - http://stackoverflow.com/questions/133487/how-do-i-remove-elements-from-a-linkedlist-in-c-that-match- 주어진 기준 – ChrisF
@Chri sF : 그다지 똑같은 질문은 모든 요소가 아니라 하나의 요소를 제거하는 것이 었습니다. –
아마 Edges.Count> 0만으로 새로운 LinkedList를 생성하는 것이 더 빠를 것입니다 (이전 목록에서 Remove 액션을 모두 수행하는 대신). Mark Byers 솔루션을 사용하면됩니다. – Zyphrax