2011-11-14 9 views
11

Ho un NSMutableDictionary con chiavi stringa e ogni chiave ha il proprio array. Voglio riordinare il dizionario con i valori delle chiavi in ​​ordine alfabetico. Come posso fare questo?come posso ordinare NSMutableDictionary con il valore delle chiavi?

+0

ho unsorted NSMutableDictionary con valore di chiave e voglio riordinare stesso NSMutableDictionary con valori chiave in ordine alfabetico. È possibile con NSMutableDictionary? –

risposta

19

Un dizionario è non ordinato per definizione.

Per l'iterazione delle chiavi in ​​un ordine specifico, è possibile ordinare una matrice contenente le chiavi del dizionario.

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

Ci sono molti altri metodi, per esempio sorted... ordinamento con un NSComparator. Dai uno sguardo allo here.

8

Utilizzare questo

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

Ho usato questo codice per recuperare il dizionario ordinato, ma ottengo ancora unsorted 'codice NSMutableDictionary * dicProjectListSorted = [NSMutableDictionary dictionary]; NSArray * sortedKeys = [keys sortedArrayUsingSelector: @selector (localizedCaseInsensitiveCompare :)]; NSMutableArray * sortedValues ​​= [[[NSMutableArray alloc] init] autorelease]; per (chiave id in tasti ordinati) { id object = [dicProjectList objectForKey: key]; [sortedValues ​​addObject: object]; [dicProjectListSorted setObject: sortedValues ​​forKey: key]; } –

+0

da questo codice si ottiene il valore della chiave in cortocircuito e thn per il valore chiave si ottengono i dati – Ron

+0

tasti ordinati che vengono corretti come ordinati ma quando provo a ricreare il dizionario (dicProjectListSorted) all'interno di un ciclo, ottengo l'ordine non ordinato ?? –

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