2009-02-25 32 views
11

Tôi đang sử dụng một số Dictionary<TKey, TValue> và tôi đang nhận được một số hành vi kỳ lạ, mặc dù có phần dễ hiểu trong các thử nghiệm của mình.Có từ điển <TKey, TValue> theo thứ tự các khóa theo mặc định không?

Bất kể thứ tự tôi thêm mục vào từ điển khi tôi gọi Dictionary.Keys các phím được trả lại theo thứ tự được chỉ định bởi việc triển khai IComparable<T> cho loại khóa.

Điều này là tốt cho tôi vì tôi muốn nhận được chúng theo thứ tự đó, nhưng tôi không thể tìm thấy bất cứ nơi nào mà chỉ định rằng họ nên và sẽ luôn luôn được trả lại theo cách này. Do đó, tôi không biết nên dựa vào nó luôn luôn như thế hoặc làm một (có khả năng dư thừa) sắp xếp trên List<T> Tôi đang xây dựng.

Tôi có thể dựa vào hành vi này hay không?

Trả lời

24

Bạn không thể dựa vào hành vi này. Đây chỉ là sự trùng hợp ngẫu nhiên có thể do kích thước mẫu của bạn hoặc việc triển khai GetHashCode. Sau khi bạn thêm đủ các mục vào bảng và buộc khôi phục đầy đủ, các phím sẽ không được đặt hàng.

MSDN dứt khoát nói thứ tự của Keys là không xác định (http://msdn.microsoft.com/en-us/library/yt2fy5zk.aspx)

16

Bạn đang tìm kiếm SortedDictionary<K,V>. Điển <K,V> sử dụng băm, mà với bộ nhỏ có thể nhìn bề ngoài tương tự như phân loại.

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