Tôi muốn sử dụng loại hoạt động giống như danh sách các cặp đơn giản [(a,b)]
làm từ điển, ánh xạ khóa loại a
cho các giá trị loại b
, trong khi vẫn duy trì "người dùng -specified ", thứ tự được xác định của các phím. (ví dụ như với các danh sách thông thường - Tôi muốn có thể "nối thêm" một mục mà sau đó được công nhận là "phần tử cuối cùng".) Tuy nhiên tôi muốn tra cứu truy cập ngẫu nhiên trên các khóa có hiệu suất tốt hơn tuyến tính, tức là Data.Map
cung cấp. Một lựa chọn sẽ chỉ duy trì một bản đồ thông thường, thêm vào một danh sách các phím định nghĩa thứ tự của chúng:Loại từ điển có thứ tự khóa được xác định
data OrderedDict a b = OrderedDict (Map a b) [a]
và sau đó xác định append
hoạt động, vv mà giữ hai bộ sưu tập quan trọng trong việc đồng bộ hóa. Nó có vẻ xấu xí mặc dù để duy trì hai bộ sưu tập riêng biệt của cùng một phím. Có loại dữ liệu được tạo sẵn nào đã kết hợp các khóa đặt hàng với tra cứu truy cập ngẫu nhiên hiệu quả bằng khóa không?
[LinkedHashMap] của Java (http://docs.oracle.com/javase/6/docs/api/java/util/LinkedHashMap.html) dường như làm một việc tương tự : chuỗi một danh sách các phím thông qua bản đồ. Lệnh OrderedDict của Python chỉ đơn giản là một danh sách các cặp, vì vậy chúng không có sự trợ giúp ở đây. –
Bạn có ý nghĩa gì với "thứ tự được xác định"? Với hai khóa 'a1' và' a2', có phải là một ưu tiên được xác định liệu 'a1' có trước' a2' hoặc là độ ưu tiên được xác định khi chạy không? – Peter
@peter Tôi có nghĩa là 'thứ tự xác định' theo nghĩa tương tự như với các danh sách thông thường - nếu tôi nối 'a2' sau khi gắn thêm' a1', thì 'a1' đứng trước' a2' – gcbenison