Tôi có một lớp MyClass
tập hợp các cặp khóa-giá trị nơi quan trọng phụ thuộc vào giá trị
class MyClass
{
public string Name { get; set; } // is unique among all instances
public SomeClass Data { get; set; }
...
}
của mà tôi muốn lưu trữ một số trường hợp trong một bộ sưu tập. Tôi thường sẽ cần phải kiểm tra xem một cá thể có tên nào đó tồn tại không, và nếu có, hãy lấy lại cá thể đó. Vì việc lặp qua toàn bộ tập hợp không phải là một tùy chọn (hiệu suất!), Tôi đã nghĩ đến việc sử dụng tập hợp các cặp khóa-giá trị, ví dụ: an IDictionary<string, MyClass>
.
Chương trình của tôi cũng sẽ cho phép đổi tên các phiên bản MyClass
(nó sẽ không cho phép đổi tên nếu tính duy nhất của tên sẽ bị vi phạm). Nhưng nếu tôi đổi tên một MyClass
, tôi cũng sẽ cần xóa mục cũ khỏi từ điển và thêm mục mới (tức là với tên mới) để giữ cho dữ liệu nhất quán.
Vấn đề là tôi sẽ có một số từ điển như vậy (chứa các tập con của tất cả các trường hợp MyClass
) ở khắp mọi nơi, và sẽ khó theo dõi chúng và cập nhật thường xuyên tất cả các từ điển sau mỗi lần đổi tên.
Có cách nào để giữ các cặp khóa-giá trị nhất quán tự động không? Tôi nghĩ rằng tôi nghe nói về một cấu trúc dữ liệu cho phép điều này, mà tồn tại ít nhất trong C + + (không may, tôi không có ý tưởng làm thế nào nó được gọi là). Về cơ bản, nó phải là một bộ sưu tập mà khóa không chỉ là một chuỗi đơn giản mà còn giống như một tham chiếu đến một chuỗi (đến thuộc tính name trong trường hợp này), nhưng hoạt động như thể nó là một chuỗi. Liệu một điều như vậy tồn tại trong C#? Bạn có những ý tưởng khác làm thế nào để giữ cho các bộ sưu tập phù hợp?
Ý tưởng duy nhất của tôi là có một bộ sưu tập tất cả các từ điển ở mức cao nhất trong chương trình của tôi và làm cho phương pháp đổi tên cập nhật tất cả các từ điển đó sau quá trình đổi tên thực tế. Nhưng phải có một cách tốt hơn!
Tại sao câu hỏi này không phải là một bản sao của Best way to change dictionary key:
tôi đã biết rằng một cuốn từ điển không cho phép thay đổi chìa khóa. Thay vào đó, tôi yêu cầu một cấu trúc dữ liệu khác bằng cách nào đó tương thích với các thay đổi quan trọng (mà không làm mất lợi ích hiệu suất hoàn toàn), và tôi cũng yêu cầu các cách tiếp cận khác. Vì vậy, câu hỏi của tôi là nhiều hơn nữa mở để đầu vào từ bất kỳ hướng nào, miễn là nó giúp giải quyết vấn đề giữ dữ liệu phù hợp.
Khi sử dụng từ điển (hoặc bất kỳ khóa-giá trị nào khác), bạn nên đảm bảo rằng các phím vẫn giữ nguyên. Lý do tại sao các bộ sưu tập đó nhanh chóng, là chúng sử dụng băm các phím, do đó nhiều khóa có thể được tìm thấy rất nhanh. Nếu bạn sửa đổi các giá trị được sử dụng trong hàm băm, bạn sẽ hoàn toàn mất chức năng băm và do đó hiệu suất đạt được – HimBromBeere
Tôi không nghĩ rằng câu hỏi trùng lặp như đã nêu ở trên và sẽ đề xuất câu trả lời (không tương thích với câu trả lời được chỉ dẫn bởi liên kết trùng lặp) –
hỏi lại và tôi sẽ trả lời –