2012-03-27 33 views
6

thể trùng lặp:
Modifying .NET Dictionary while Enumerating through itXóa trong khi iterating trên một cuốn từ điển

tôi có một đối tượng từ điển khi tôi lặp lại và làm một số hoạt động. Dựa trên điều kiện tôi nên xóa hoặc giữ cặp giá trị chính tôi hiện đang lặp lại. Cách tốt nhất để xóa một keyvaluepair từ một từ điển trong khi lặp qua nó là gì? Tôi cố gắng để sử dụng một đối tượng từ điển riêng biệt để theo dõi các yếu tố để xóa nhưng im không chắc chắn làm thế nào để sau đó sử dụng nó để xóa từ điển chính của tôi hoặc nếu thats ngay cả những cách hiệu quả nhất để làm điều đó

Cảm ơn

Trả lời

9

Giữ một danh sách các phím bạn muốn xóa khi tìm thấy chúng. Sau đó, khi bạn hoàn tất, hãy lặp lại qua danh sách này, gọi số myDictionary.Remove(key) trên mỗi khóa bạn đã lưu trữ.

+5

điều đó có nghĩa là 2 lần lặp lại, một để xóa tệp và xóa các mục khác, tại sao không chỉ sao chép các mục bạn không muốn xóa sang từ điển khác? –

+1

@Euclide - Tôi thành thật không nghĩ về điều đó. Nếu không có một lý do thuyết phục để kết thúc với cùng một từ điển, sửa đổi, tôi mong rằng điều đó sẽ hiệu quả hơn trong hầu hết các trường hợp. – Rawling

+1

"tại sao không chỉ sao chép các mục bạn không muốn xóa sang từ điển khác?" Nếu số lượng các mục được dự kiến ​​sẽ bị xóa là rất ít hoặc việc loại bỏ hiếm khi, điều này sẽ rất không hiệu quả. Vì vậy, các đề xuất phụ thuộc vào mẫu truy cập dữ liệu – Imi

4

thử sử dụng một từ điển riêng và thay vì đánh dấu giá trị khóa để xóa các giá trị khóa chèn da mà bạn muốn giữ và tại và lặp lại thực hiện việc này: old_map = new_map.

Các vấn đề liên quan