2013-01-24 23 views
5

Làm cách nào tôi có thể giữ nguyên cách tôi thêm đối tượng vào NSDictionary?Đặt hàng NSDictionary

Tôi nhận thấy rằng không có thứ tự cụ thể cho các giá trị trong NSDictionary, nhưng trong trường hợp của tôi, tôi cần giữ lại thứ tự mà tôi thêm bằng cách sử dụng setValue:forKey:, như một mảng.

Tôi làm cách nào để thực hiện việc này?

Bất kỳ trợ giúp nào được đánh giá cao.

Trả lời

2

Từ điển là băm được ánh xạ để truy xuất nhanh hơn. Bạn không được phép sửa thứ tự của nó.

Nếu bạn muốn lưu trữ theo thứ tự bạn nên sử dụng mảng.

Hoặc bạn phải sử dụng một số cách phức tạp, tiếp tục chắp thêm int orderNumber (Bạn cần phải tăng nó sau mỗi setObject/setValue) bằng khóa. để lưu trữ và truy xuất như:

NSDictionary *dict=[NSDictionary new]; 
NSString *key=....; 
[dict setValue:@"some value" forKey:[NSString stringWithFormat:@"%d-%@",orderNumber, key]]; 

Hoặc bạn có thể sử dụng một mảng có một từ điển cho mỗi chỉ số.


Một cách khác là sử dụng một lớp tùy chỉnh như

@interface .... 
    @property(...) NSInteger index; 
    @property(...) NSString *key; 
    @property(...) id object; 
    // and methods to retrieve based on key, based on index etc 
@end 

EDIT 2:

Tìm thấy rất giống với những gì tôi đã đăng một năm trước, xem OrderedDictionary này.

+0

Tôi nhận ra mình có thể sử dụng mảng, nhưng tôi cần lưu trữ cả Khóa và Giá trị, một thứ mà NSArray không cho phép. –

+0

Có, tôi biết, Bây giờ tôi đã cập nhật câu trả lời của mình .. –

0

một cái gì đó như thế này:

static int index; 
[myDictionary setValue:someValue forKey:[NSString stringWithFormat:@"key%d", index++]]; 
0

Bạn sẽ có cần phải:

  • Theo dõi thứ tự riêng biệt bằng cách duy trì một mảng của các phím, theo thứ tự bạn thêm chúng.
  • Thêm thứ tự làm thuộc tính của đối tượng bạn đang lưu trữ trong từ điển.

Tôi muốn cách tiếp cận thứ hai vì nó giữ tất cả thông tin ở một nơi. Nếu đối tượng bạn đang lưu trữ không được bạn xác định, thì bạn có thể cần phải tạo một lớp con của đối tượng đó hoặc đóng gói nó trong một đối tượng của riêng bạn, với thành viên bổ sung.