2012-03-21 37 views
5

tôi có mã nàyDừng NSDictionary từ sắp xếp các mục của nó

NSDictionary *tempDict = [NSDictionary dictionaryWithObjects: 
[NSArray arrayWithObjects:@"authorId","authorName","authorDescription",@"image",nil] forKeys: 
[NSArray arrayWithObjects:@"id",@"name",@"desc",@"image",nil]]; 
NSLog(@"%@",[tempDict description]); 

và đầu ra là

desc = authorDescription; 

id = authorId; 

image = image; 

name = authorName; 

Bạn thấy rằng các từ điển được sắp xếp theo chủ chốt, theo thứ tự abc, đối với một số lý do. Điều này là không tốt cho tôi, bởi vì tôi cần phải thêm từ điển này vào một plist, và plist này đã có một số từ điển với các phím unsorted. Vậy làm thế nào tôi có thể tránh sự phân loại này?

Trả lời

6

Các phân loại là do [NSDictionary description], được sử dụng bởi NSLog. Đây không phải là tính năng cơ bản của NSDictionary. Nếu bạn truy cập các phím thông qua liệt kê nhanh hoặc [dictionary allKeys], bạn sẽ không tìm thấy nó được sắp xếp.

Nhưng với câu hỏi cơ bản của bạn, nếu những gì bạn muốn là "chưa phân loại" (ngẫu nhiên), thì "sắp xếp" chỉ là một trong các chuỗi ngẫu nhiên có thể. Nếu bạn thực sự muốn unsorted, sau đó sắp xếp không nên quan trọng vì nó là một tập hợp con.

Nếu sắp xếp các vấn đề, thì bạn không có nghĩa là "chưa được phân loại", nghĩa là "một số thứ tự được sắp xếp khác, chẳng hạn như thứ tự chèn". Nếu bạn cần NSDictionary để được sắp xếp theo một cách nào đó, bạn cần áp đặt điều đó bằng cách chuyển đổi nó thành một NSArray.

+0

Tôi đang sử dụng '[dataDict allKeys]' nhưng vẫn nhận được thứ tự ngẫu nhiên các khóa của tôi. – upendra

+0

@upendra Tôi không hiểu câu hỏi. Không có lệnh nào được hứa cho 'allKeys'. –

2

Nó không được sắp xếp. Nó hiển thị theo thứ tự tùy ý. Thêm một số mặt hàng khác và bạn có thể sẽ thấy thay đổi thứ tự.

(Có thể là, trong nội bộ, lưu trữ được, vì một lý do điên, thực sự sắp xếp, nhưng không có gì bạn có thể làm về điều đó cả.)

+0

ok, tôi đang viết dict này trong plist, mở plist và từ điển này được sắp xếp theo khóa (hoặc theo thứ tự tùy ý - nó không quan trọng) trong plist. Nó không thể chấp nhận được cho tôi – user1248568

+0

Như lulius đã nói, NSDictionary không phân loại nội dung của nó. NSDictionary về cơ bản là một bảng băm. Những gì bạn thấy được sắp xếp là kết quả in của nó chỉ. Nếu bạn thêm 'tempDict' vào một đối tượng từ điển/cặp khóa khác sẽ được thêm vào và chúng sẽ được lưu trữ không theo thứ tự cụ thể (đó là nội bộ của NSDictionary). Hoặc, bạn có thể thử NSLogging NSDictionary khác của bạn đã được khởi tạo bằng cách sử dụng plist của bạn, mặc dù dữ liệu của nó không được sắp xếp kết quả in ra của nó được sắp xếp quá phải không? – nacho4d

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