11

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?

Verbeia
  • 4,400
  • 2
  • 23
  • 44
Alaattin Bedir
  • 193
  • 2
  • 3
  • 10
  • i have unsorted NSMutableDictionary with key value and i want to re-sort same NSMutableDictionary with key values alphabetically. Is that possible with NSMutableDictionary? – Alaattin Bedir Nov 14 '11 at 16:06

3 Answers3

19

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.

tobiasbayer
  • 10,269
  • 4
  • 46
  • 64
8

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];
}
Rahul Juyal
  • 2,124
  • 1
  • 16
  • 33
  • I 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]; } – Alaattin Bedir Nov 14 '11 at 12:50
  • from this code u get shorted key value and thn by key value u get your data – Rahul Juyal Nov 14 '11 at 13:09
  • sortedKeys getting correct as sorted but when i try to recreate dictionary (dicProjectListSorted) inside a loop i get it unsorted?? – Alaattin Bedir Nov 14 '11 at 13:30
3
NSDictionary *yourDictionary;
NSArray *sortedKeys = [yourDictionary.allKeys sortedArrayUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"self" ascending:YES]]];
NSArray *sortedValues = [yourDictionary objectsForKeys:sortedKeys notFoundMarker:@""];
Vitalii Gozhenko
  • 9,220
  • 2
  • 48
  • 66
  • A 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). – Motti Shneor Sep 26 '21 at 10:37