2011-11-14 8 views
11

Tengo un NSMutableDictionary con claves de cadena y cada tecla tiene su propia matriz. Quiero volver a ordenar el diccionario con el valor de las teclas alfabéticamente. ¿Cómo puedo hacer esto?¿cómo puedo ordenar NSMutableDictionary con el valor de las claves?

+0

he NSMutableDictionary sin clasificar, con valor de clave y quiero volver a ordenar misma NSMutableDictionary con valores clave en orden alfabético. ¿Es eso posible con NSMutableDictionary? –

Respuesta

19

Un diccionario no está ordenado por definición.

Para iterar sobre las teclas en un orden específico, puede ordenar una matriz que contiene las teclas del diccionario.

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

Existen otros métodos de sorted..., p. Ej. clasificando con un NSComparator. Eche un vistazo here.

8

Uso éste

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

Utilicé este código para recuperar el diccionario ordenado pero aun así lo obtuve sin clasificar 'código NSMutableDictionary * dicProjectListSorted = [NSMutableDictionary dictionary]; NSArray * sortedKeys = [keys sortedArrayUsingSelector: @selector (localizedCaseInsensitiveCompare :)]; NSMutableArray * sortedValues ​​= [[[NSMutableArray alloc] init] liberación automática]; for (clave de identificación en sortedKeys) { id object = [dicProjectList objectForKey: key]; [sortedValues ​​addObject: object]; [dicProjectListSorted setObject: sortedValues ​​forKey: clave]; } –

+0

de este código obtienes un valor de clave en cortocircuito y luego por valor de clave obtienes tus datos – Ron

+0

ordenadas Las clases son correctas como ordenadas, pero cuando intento recrear el diccionario (dicProjectListSorted) dentro de un bucle lo obtengo sin clasificar ?? –

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