Tôi đã gặp sự cố tương tự như được tìm thấy in this question. Tuy nhiên, tôi có một câu hỏi tiếp theo. Tôi dường như ở trong tình huống tương tự như người hỏi ban đầu: Tôi có một plist với một hệ thống phân cấp các từ điển xác định một màn hình cấu hình. Đây là không phải có thể thay đổi và sẽ giữ nguyên trong suốt ứng dụng. Vì cuộc thảo luận ban đầu dường như tập trung vào các vấn đề phát sinh từ việc biến đổi từ điển, tôi phải yêu cầu xác nhận: là thứ tự của một từ điển được đảm bảo giống như trong plist, tức là nó được đọc (với initWithContentsOfFile)? Tôi có thể sử dụng allKeys trên nó trong trường hợp này để có được một dãy lệnh đúng nếu từ điển không bao giờ thay đổi?Thứ tự khóa NSDictionary có được bảo đảm giống như được khởi tạo nếu nó không bao giờ thay đổi không?
Trả lời
Không, các phím không có khả năng xuất hiện theo thứ tự giống như tệp plist
của bạn. Tôi không thể nhìn dưới mui xe, nhưng tôi đoán rằng các phím được đặt hàng theo bất kỳ cách nào cung cấp một cái nhìn hiệu quả. Tài liệu cho allKeys
nói rằng thứ tự của các phần tử trong mảng không được xác định.
Nếu bạn cần NSDictionary
để duy trì trật tự, hãy xem CHDataStructure's CHOrderedDictionary
, thực hiện chính xác điều đó. Tôi sử dụng nó mọi lúc.
Tôi cần nó trên iPhone, do đó, Cocoa Touch. Tôi tự hỏi nếu nó chạy trên đó? Trong mọi trường hợp, tôi sẽ trả lời câu hỏi của riêng tôi: không, NSDictionary dường như không bao giờ được mong đợi theo bất kỳ thứ tự nào. Vì vậy, tôi đang làm những gì tôi đã nhìn thấy những người khác đề nghị: bao gồm một mảng với thứ tự và chìa khóa "_order". Mọi người đã nói rằng việc lưu giữ dữ liệu đôi phức tạp này không phải là điều vô lý trong quan điểm của họ. Vẫn còn clunky, mặc dù. – Thaurin
Có, CHDataStructures chạy trên cả Mac và iPhone. –
Tôi sẽ không cho rằng các khóa sẽ có bất kỳ loại lệnh nào vì allKeys
không đảm bảo đơn đặt hàng.
Nội bộ, NSDictionary
uses a hash table.
Thứ tự của các yếu tố trong mảng không được định nghĩa.
Nếu bạn muốn hiển thị giá trị theo một số thứ tự, hãy lấy khóa, sắp xếp mảng khóa và sau đó nhận giá trị cho mỗi khóa.
Không có gì ở tất cả được đảm bảo về đơn đặt hàng. Thậm chí không chắc chắn rằng việc lặp lại từ điển hai lần sẽ cung cấp cho bạn các khóa theo cùng một thứ tự.
- 1. Thứ tự khởi tạo có được đảm bảo theo tiêu chuẩn không?
- 2. TCP có được đảm bảo đến đúng thứ tự không?
- 3. Thứ tự semaphore được đảm bảo?
- 4. Làm thế nào để JVM đảm bảo rằng System.identityHashCode() sẽ không bao giờ thay đổi?
- 5. CERs có thể được sử dụng để đảm bảo rằng quyết toán không bao giờ được gọi?
- 6. Là unmodifiableCollection.get được khởi tạo tĩnh có được bảo đảm không?
- 7. Thứ tự của một từ điển Python có được đảm bảo lặp lại không?
- 8. Các yêu cầu AJAX tiếp theo có được đảm bảo để nhận được theo thứ tự không?
- 9. Thứ tự trong truy vấn phụ có được bảo đảm để được giữ nguyên không?
- 10. Tại sao thực hiện onDestroy() nếu nó không được bảo đảm để được gọi?
- 11. Thứ tự PostgreSQL có được bảo đảm đầy đủ nếu phân loại trên thuộc tính không phải duy nhất không?
- 12. Với liệt kê nhanh và NSDictionary, việc lặp lại theo thứ tự các khóa không được đảm bảo - làm thế nào tôi có thể tạo nó theo thứ tự IS?
- 13. Thứ tự của mảng kết hợp có được bảo đảm bằng PHP không?
- 14. Thứ tự các khóa có được trả về từ mảng_không giống như thứ tự trong mảng đầu vào không?
- 15. Foreach có được đảm bảo lặp lại theo thứ tự mảng trong php không?
- 16. Là std :: cout đảm bảo được khởi tạo?
- 17. Có phải cho (auto i: unordered_map) được đảm bảo có cùng thứ tự mỗi lần không?
- 18. Do dicts có duy trì thứ tự lặp lại nếu chúng không được sửa đổi không?
- 19. Thứ tự liệt kê vòng lặp NSArray có được đảm bảo không?
- 20. Đảm bảo rằng Spring Bean được khởi tạo đúng cách
- 21. Mẫu C++ có sử dụng bộ nhớ nếu nó không bao giờ được tham chiếu không?
- 22. Đối tượng có được bảo đảm di chuyển khi nó được trả về không?
- 23. Đường ray: Đá quý có được bảo đảm không?
- 24. Danh sách Python có được bảo đảm để các phần tử của nó được giữ nguyên theo thứ tự chúng được chèn vào không?
- 25. Liệu entrySet() trong LinkedHashMap có đảm bảo trật tự không?
- 26. Làm cách nào để có được thứ tự Ban đầu của NSDictionary/NSMutableDictionary?
- 27. Đảm bảo không đảm bảo VirtualMachineError
- 28. Có lý do nào cho cột Khóa chính không bao giờ được sử dụng không?
- 29. Bạn có thể đảm bảo thứ tự hủy khi đối tượng được khai báo trên ngăn xếp không?
- 30. PrintNormal() Issue 'Nó không được khởi tạo'
Ứng dụng của tôi hiển thị chúng theo cùng thứ tự như plist, đó là một trong những lý do tôi bắt đầu tự hỏi. Nhưng bây giờ tôi biết rằng nó không xác định nonetheles. – Thaurin
Trong ứng dụng của tôi, chúng không luôn luôn hiển thị theo thứ tự như plist - phụ thuộc vào plist được đọc vào thời điểm đó. – xcoder