2011-11-14 18 views
11

Tôi có một số NSMutableDictionary với các phím chuỗi và mỗi khóa có một mảng riêng. Tôi muốn sắp xếp lại từ điển với các khóa có giá trị theo thứ tự abc. Tôi có thể làm cái này như thế nào?Tôi có thể sắp xếp NSMutableDictionary với giá trị khóa như thế nào?

+0

tôi đã Unsorted NSMutableDictionary với giá trị quan trọng và tôi muốn để lại cùng một loại NSMutableDictionary với các giá trị quan trọng theo thứ tự abc. Có thể với NSMutableDictionary? –

Trả lời

19

Từ điển được phân loại theo định nghĩa.

Để lặp qua các phím theo thứ tự cụ thể, bạn có thể sắp xếp một mảng chứa các khóa của từ điển.

NSArray *keys = [theDictionary allKeys]; 
NSArray *sortedKeys = [keys sortedArrayUsingSelector:@selector(compareMethod:)]; 

Có một số phương pháp khác sorted..., ví dụ: phân loại với NSComparator. Có một cái nhìn here.

8

Sử dụng này một

NSArray *myKeys = [Dict allKeys]; 
NSArray *sortedKeys = [myKeys sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]; 
NSMutableArray *sortedValues = [[[NSMutableArray alloc] init] autorelease]; 

for(id key in sortedKeys) { 
    id object = [Dict objectForKey:key]; 
    [sortedValues addObject:object]; 
} 
+0

Tôi đã sử dụng mã này để truy xuất từ ​​điển được sắp xếp nhưng vẫn nhận được nó không được phân loại 'mã NSMutableDictionary * dicProjectListSorted = [Từ điển NSMutableDictionary]; NSArray * sortedKeys = [keys sortArrayUsingSelector: @selector (localizedCaseInsensitiveCompare :)]; NSMutableArray * selectedValues ​​= [[[NSMutableArray alloc] init] autorelease]; cho (id trong các khóa được sắp xếp) { id object = [dicProjectList objectForKey: key]; [selectedValues ​​addObject: object]; [dicProjectListSorted setObject: sortedValues ​​forKey: key]; } –

+0

từ mã này u nhận được giá trị khóa ngắn và thn theo giá trị khóa u lấy dữ liệu của bạn – Ron

+0

selectedKeys nhận được đúng như sắp xếp nhưng khi tôi cố gắng tạo lại từ điển (dicProjectListSorted) bên trong một vòng lặp tôi nhận được nó unsorted ?? –

2
NSDictionary *yourDictionary; 
NSArray *sortedKeys = [yourDictionary.allKeys sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"self" ascending:YES]]]; 
NSArray *sortedValues = [yourDictionary objectsForKeys:sortedKeys notFoundMarker:@""];