Tôi có một LinkedList các nút, mỗi nút lưu trữ một LinkedList các cạnh. Tôi muốn thực hiện điều gì đó dọc theo các dòng củaC#: Tại sao LinkedList không có một phương thức RemoveAll có một biến vị ngữ?
nodes.RemoveAll(n => n.edges.Count == 0)
Nhưng không có RemoveAll ở đó. Tôi không hiểu tại sao nó không có nó, vì các bộ sưu tập khác làm. Điều này sẽ phải lặp qua tất cả các phần tử và chỉ loại bỏ từng phần một từ những gì tôi hiểu, điều này sẽ không có hiệu quả xấu đối với danh sách được liên kết.
Bây giờ tôi phải làm điều này thay vì:
for (LinkedListNode<MyNode> n2 = nodes.First; n2 != null;)
{
LinkedListNode<MyNode> temp = n2.Next;
if (n2.Value.edges.Count == 0)
nodes.Remove(n2);
n2 = temp;
}
Trong khi nó hoạt động, nó làm cho mọi thứ dường như phức tạp hơn những gì họ đang có.
Đã hỏi - http://stackoverflow.com/questions/133487/how-do-i-remove-elements-from-a-linkedlist-in-c-that-match- a-given-criteria – ChrisF
@Chri sF: Không hoàn toàn giống nhau - câu hỏi đó chỉ là loại bỏ một phần tử chứ không phải tất cả các phần tử. –
Có lẽ việc tạo một LinkedList mới chỉ với Edges.Count> 0 sẽ nhanh hơn (thay vì thực hiện tất cả những hành động Remove trên danh sách cũ). Giải pháp Mark Byers bên dưới sẽ thực hiện. – Zyphrax