2010-03-22 19 views
5

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

7

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.

+0

Ứ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

+0

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

6

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.

+0

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

+1

Có, CHDataStructures chạy trên cả Mac và iPhone. –

3

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.

Từ allKeys description:

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.

2

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ự.

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