Tôi không phải là chuyên gia về C# và LINQ.Xây dựng từ điển được sắp xếp bằng ToDictionary
Tôi có một Dictionary
, mà tôi hiểu bảng băm, tức là, các khóa không được sắp xếp.
dataBase = new Dictionary<string, Record>()
Record
là lớp do người dùng xác định chứa một số dữ liệu cho chuỗi khóa nhất định.
Tôi tìm thấy một ví dụ thú vị có thể chuyển đổi Dictionary
vào này một sắp xếp điển bởi LINQ:
var sortedDict = (from entry in dataBase orderby entry.Key ascending select entry)
.ToDictionary(pair => pair.Key, pair => pair.Value);
Mã này hoạt động một cách chính xác. Kết quả sortedDict
được sắp xếp theo các khóa.
Câu hỏi: Tôi thấy rằng sortedDict
vẫn là một bảng băm, một loại:
System.Collections.Generic.Dictionary<string, Record>
tôi mong đợi từ điển kết quả phải là một loại map
như trong C++ STL, mà thường được thực hiện như một cây nhị phân (cân bằng) để duy trì thứ tự của các phím. Tuy nhiên, từ điển kết quả vẫn là một bảng băm.
Cách sortedDict
có thể duy trì thứ tự? Bảng băm không thể giữ thứ tự của các khóa. Việc triển khai C# 'Generic.Dictionary
' của C# khác với bảng băm điển hình?
Bằng cách sử dụng 'ToDictionary()', bạn yêu cầu và có một 'Dictionary'. Nếu bạn muốn duy trì một Diecionary được sắp xếp, sử dụng 'SortedDictionary' – TheEvilPenguin
Tôi biết. Nhưng, tôi cần một cuốn từ điển được sắp xếp vào giây phút cuối cùng. Câu hỏi của tôi là làm thế nào 'Từ điển' có thể duy trì thứ tự, điều đó thật kỳ quặc đối với tôi.Mã LINQ thực sự xây dựng một từ điển * sắp xếp *, trong khi kiểu vẫn là một từ điển. – minjang
LINQ chỉ cần sắp xếp 'Từ điển' nó không tạo ra một' SortedDictionary' –