Quá OrderedDictionary
tải hoạt động lập chỉ mục để lập chỉ mục với một số nguyên N
sẽ đưa mục vào vị trí N
, trong khi lập chỉ mục với một Object
sẽ lấy mục đó lõi cho đối tượng đó. Nếu một người tạo ra một vật phẩm OrderedDictionary<int, string>
được gọi myDict
và thêm (1, "George") và (0, "Fred") theo thứ tự đó, nên myDict[0]
trả lại "George" hay "Fred"?
Một vấn đề như vậy có thể đã được giải quyết bằng cách áp đặt một ràng buộc lớp đối với loại khóa. Mặt khác, phần lớn tính hữu dụng của các bộ sưu tập chung bắt nguồn từ khả năng làm việc hiệu quả với các loại giá trị. Áp đặt một ràng buộc lớp đối với loại khóa có vẻ hơi xấu.
Nếu lớp không phải tuân thủ CLS mà chỉ phải làm việc với vb.net, một thiết kế hợp lý có thể đã được sử dụng các thuộc tính được lập chỉ mục có tên. Do đó, trong ví dụ trên, myDict.ByKey[0]
sẽ mang lại "Fred", và myDict.BySequence[0]
sẽ mang lại "George". Thật không may, các ngôn ngữ như C # không hỗ trợ các thuộc tính được lập chỉ mục. Mặc dù người ta có thể đã loại bỏ một cái gì đó để cho phép sử dụng cú pháp trên ngay cả khi không có các thuộc tính như vậy, nhưng quyết định không may là bọc các trường cấu trúc như Point
và Rectangle
có nghĩa là myDict.ByKey[0] = "Wally"
để làm việc, myDict.ByKey
sẽ phải trả về một đối tượng lớp mới. Một cấu trúc sẽ hiệu quả hơn, nhưng các trình biên dịch sẽ từ chối những gì trông giống như ghi vào một cấu trúc chỉ đọc (mặc dù thuộc tính đó sẽ không sửa đổi cấu trúc được trả về bởiByKey
, nhưng thay vào đó sửa đổi bộ sưu tập mà nó chứa một tham chiếu).
Cá nhân, tôi nghĩ rằng một đối tượng từ điển được chỉ định là theo dõi thứ tự chèn sẽ là một điều tốt đẹp để có; Tôi cũng muốn có một đối tượng từ điển có thể dễ dàng trả về khóa được liên kết với một khóa cụ thể (vì vậy, ví dụ: nếu một từ điển không phân biệt chữ hoa chữ thường và đã thêm một bản ghi với khóa "GEORGE", một có thể hỏi từ điển khóa nào được liên kết với "George" mà không phải tìm kiếm trong tất cả các KeyValuePair
đối tượng được trả về trong bảng liệt kê.
SortedDictionary<TKey, TValue>
: msdn.microsoft.com/en-us/l Library / f7fta44c.aspx