Trước tiên, dựa trên giả định chính của bạn, bạn chính xác. Từ điển thông thường không đảm bảo về thứ tự liệt kê.
Thứ hai, bạn cần cẩn thận khi đi theo số SortedDictionary
với tuyến đường tùy chỉnh IComparer
. Bộ so sánh được sử dụng cho sự bình đẳng chính cũng như sắp xếp bộ sưu tập. Tức là, sử dụng IComparer
dựa trên thứ tự bổ sung, bạn có thể gặp khó khăn khi truy xuất phần tử từ giá trị khóa SortedDictionary
, nó có thể bị mất trong cây (đó là sự hậu thuẫn của từ điển được sắp xếp).
Nếu bạn sẵn sàng sử dụng lộ trình Thư viện lớp chung C5, bạn có thể lấy số dặm tốt từ số HashedLinkedList<KeyValuePair<T>>
hoặc HashedLinkedList<T>
nếu T là tự khóa. Bạn có thể tạo một IEqualityComparer
sẽ hoạt động trên khóa để tạo mã băm. Sau đó, lấy giá trị thực tế, bạn có thể sử dụng Find(ref T x)
với nguyên mẫu x (có lẽ chỉ có khóa được đặt) sẽ tìm thấy số T
được lưu trữ và trả lại bằng cách tham chiếu trong O (1) time vs. O (log) n) với số SortedDictionary
. Đồng thời, được hỗ trợ bởi một LinkedList
, nó được đảm bảo liệt kê theo thứ tự bổ sung (và bạn có thể xác định hướng nào bạn muốn thông qua C5's IDirectedEnumerable
).
Hy vọng điều đó sẽ hữu ích.
Nguồn
2008-10-21 17:37:05
Tôi không theo thứ tự "Key". Tôi sau khi thêm lệnh. Mặc dù tôi có quan điểm của bạn về kế thừa và ghi đè GetEnumerator. –