Tôi đã nhìn vào một số mã đồng nghiệp của tôi đã kiểm tra trong, nó trông như thế này:Tại sao .Net Dictionary trông giống như nó được sắp xếp?
return list.OrderBy(item => item.Order).ToDictionary(item => item.Id);
tôi ngay lập tức nói với đồng nghiệp của tôi rằng mã của mình là sai, vì Dictionary
là một bảng băm, một tổ chức phi -sắp bộ sưu tập. Anh ta nên sử dụng một bộ sưu tập bảo quản trật tự hoặc sắp xếp các mục sau khi đọc chúng từ từ điển với foreach
, tôi nói.
Nhưng anh ấy trả lời "Không, không, mã của tôi là chính xác! Hãy nhìn: bây giờ tôi đã thêm OrderBy
, các mục xuất hiện theo đúng thứ tự."
Hóa ra, trong trường hợp kiểm tra, anh ta đã đúng. Tôi đã thử trên một số dữ liệu khác, nhưng nó vẫn được sắp xếp hoàn hảo!
Tôi đã nói với anh ấy rằng anh ấy không nên dựa vào hành vi này, nhưng anh ấy không đồng ý và tôi đang gặp sự cố khi giải thích lý do. Bên cạnh đó, tôi quan tâm đến lý do tại sao thứ tự như vậy thường dường như được bảo tồn.
Vì vậy, câu hỏi của tôi là ... Tại sao Dictionary
, một bộ sưu tập cơ bản chưa được phân loại, trông rất giống với nó được sắp xếp?
Dictionary <> cung cấp không đảm bảo rằng bộ sưu tập là không có thứ tự . Nó không sử dụng mục đích ngẫu nhiên. Có, mã là sai. –
có Justin, đây là bản sao. Câu trả lời của câu hỏi bạn liên kết là những gì tôi muốn. Làm thế nào bạn có thể tìm thấy bản sao quá nhanh trong số rất nhiều câu hỏi về từ điển? Tôi đã tìm kiếm và không thể tìm thấy nó. Cảm ơn bạn! –
Tôi không biết (đó là lý do tại sao tôi đăng bài này như một bình luận) nhưng tôi tưởng tượng nó giống như trong SQL: các hàng được trả về bởi 'SELECT' được trả về theo thứ tự không xác định trừ khi mệnh đề' ORDER BY' được bao gồm . Thông thường, đặc biệt là trong các tập dữ liệu nhỏ, các hàng được trả về theo cùng thứ tự mà chúng được chèn vào, điều này dẫn đến rất nhiều người. (Tôi luôn nói với mọi người để bao gồm một 'ORDER BY' nếu họ quan tâm đến thứ tự của kết quả. Nó * có thể * làm việc mà không có nó, nhưng nó cũng có thể phá vỡ khủng khiếp.) –