2011-11-30 14 views
6

Hihi all,iPhone - Sắp xếp NSMutableArray chứa NSDictionary với 2 phím

Tôi có NSMutableArray chứa NSDictionary khác nhau. Trong mỗi NSDictionary, tôi có hai cặp khóa-giá trị, ví dụ: username và loginDate.

Tôi sẽ cần phải sắp xếp tất cả NSDictionary trong NSMutableArray này dựa trên loginDate giảm dần và tên người dùng tăng dần.

Chỉ để minh họa chi tiết hơn:

NSMutableArray (index 0): NSDictionary -> username:"user1", loginDate:20 Dec 2011 
NSMutableArray (index 1): NSDictionary -> username:"user2", loginDate:15 Dec 2011 
NSMutableArray (index 2): NSDictionary -> username:"user3", loginDate:28 Dec 2011 
NSMutableArray (index 3): NSDictionary -> username:"user4", loginDate:28 Dec 2011 

Sau khi phân loại, kết quả trong mảng nên là:

NSMutableArray (index 0): NSDictionary -> username:"user3", loginDate:28 Dec 2011 
NSMutableArray (index 1): NSDictionary -> username:"user4", loginDate:28 Dec 2011 
NSMutableArray (index 2): NSDictionary -> username:"user1", loginDate:20 Dec 2011 
NSMutableArray (index 3): NSDictionary -> username:"user2", loginDate:15 Dec 2011 

Làm thế nào tôi có thể đạt được điều này? Đã trải qua một số phương thức sortUsingComparator, không thể tìm ra cách cho việc này.

+0

Có phải loginDate một chuỗi hoặc là một NSDate? –

+0

Đây là một NSDate. –

Trả lời

6

Có thể giống như thế này?

[array sortUsingDescriptors: 
[NSArray arrayWithObjects: 
    [[[NSSortDescriptor alloc] 
    initWithKey:@"loginDate" 
    ascending:NO] 
    autorelease], 
    [[[NSSortDescriptor alloc] 
    initWithKey:@"username" 
    ascending:YES] 
    autorelease], 
    nil]]; 

Nếu bạn xây dựng dành cho iOS 4 hoặc cao hơn, bạn thậm chí có thể làm:

[array sortUsingDescriptors: 
[NSArray arrayWithObjects: 
    [NSSortDescriptor sortDescriptorWithKey:@"loginDate" ascending:NO], 
    [NSSortDescriptor sortDescriptorWithKey:@"username" ascending:YES], 
    nil]]; 

này hoạt động bằng cách sử dụng phương pháp compare: so sánh thuộc tính giá trị quan trọng, đó là giá trị trả về bởi valueForKey:. Trong trường hợp của NSDictionary nó sẽ nhiều hơn hoặc ít hơn chỉ cần gọi objectForKey: để có được giá trị. Có một số ký hiệu đặc biệt như tiền tố tên khóa với "@", xem Difference valueforKey objectForKey để biết thêm chi tiết.

+0

Cảm ơn lời khuyên, chắc chắn sẽ thử nó ra và phản hồi một lần nữa .. :) –

+0

Điều này sẽ sắp xếp bằng cách sử dụng bộ chọn 'so sánh:' cho mỗi khóa. Bạn cũng có thể chỉ định một bộ chọn khác hoặc sử dụng bộ so sánh tùy chỉnh cho từng bộ mô tả sắp xếp nếu bạn muốn. –

+0

Cảm ơn bạn rất nhiều! Nó hoạt động! :) –