how can I sort NSMutableDictionary with keys value?
16,757
Solution 1
A dictionary is unsorted by definition.
For iterating over the keys in a specific order, you can sort an array containing the keys of the dictionary.
NSArray *keys = [theDictionary allKeys];
NSArray *sortedKeys = [keys sortedArrayUsingSelector:@selector(compareMethod:)];
There are several other sorted...
methods, e.g. sorting with a NSComparator
. Have a look here.
Solution 2
Use this one
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];
}
Solution 3
NSDictionary *yourDictionary;
NSArray *sortedKeys = [yourDictionary.allKeys sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"self" ascending:YES]]];
NSArray *sortedValues = [yourDictionary objectsForKeys:sortedKeys notFoundMarker:@""];
Author by
Alaattin Bedir
Updated on June 11, 2022Comments
-
Alaattin Bedir almost 2 years
I have a
NSMutableDictionary
with string keys and every key has its own array. I want to re-sort the dictionary with keys value alphabetically. How can I do this? -
Alaattin Bedir over 12 yearsI used this code to retrieve sorted dictionary but still get it unsorted `code NSMutableDictionary *dicProjectListSorted = [NSMutableDictionary dictionary]; NSArray *sortedKeys = [keys sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; NSMutableArray *sortedValues = [[[NSMutableArray alloc] init] autorelease]; for(id key in sortedKeys) { id object = [dicProjectList objectForKey:key]; [sortedValues addObject:object]; [dicProjectListSorted setObject:sortedValues forKey:key]; }
-
Rahul Juyal over 12 yearsfrom this code u get shorted key value and thn by key value u get your data
-
Alaattin Bedir over 12 yearssortedKeys getting correct as sorted but when i try to recreate dictionary (dicProjectListSorted) inside a loop i get it unsorted??
-
Motti Shneor over 2 yearsA worthy addition would be - that a Dictionary (whether mutable or immutable) maintains a hash table of its keys, and so - can never be really "sorted" - hence you MUST go through another collection object (here NSArray) which is ordered (maintains order of the items in the collection).