objective ios dictionary nsmutabledictionary

ios - objective - Ordenar un NSMutableDictionary



nsdictionary to object swift (6)

Tengo un NSMutableDictionary que asigna NSString a NSString (aunque los valores son NSStrings , en realidad son solo números enteros).

Por ejemplo, considere las siguientes asignaciones,

"dog" --> "4" "cat" --> "3" "turtle" --> "6"

Me gustaría terminar con las 10 mejores entradas en el diccionario ordenadas por orden decreciente del valor. ¿Puede alguien mostrarme el código para esto? Tal vez hay una matriz de claves y otra matriz de valores. Sin embargo es, no me importa. Solo estoy tratando de que sea eficiente.

¡Gracias!


La forma más sencilla es:

NSArray *sortedValues = [[yourDictionary allValues] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; NSMutableDictionary *orderedDictionary=[[NSMutableDictionary alloc]init]; for(NSString *valor in sortedValues){ for(NSString *clave in [yourDictionary allKeys]){ if ([valor isEqualToString:[yourDictionary valueForKey:clave]]) { [orderedDictionary setValue:valor forKey:clave]; } } }


Obtenga la matriz de los valores, ordene esa matriz y luego obtenga la clave correspondiente al valor.

Puedes obtener los valores con:

NSArray* values = [myDict allValues]; NSArray* sortedValues = [values sortedArrayUsingSelector:@selector(comparator)];

Pero, si la colección es como se muestra en su ejemplo (es decir, puede inferir el valor de la clave), siempre puede ordenar las claves en lugar de desordenar los valores.

Utilizando:

NSArray* sortedKeys = [myDict keysSortedByValueUsingSelector:@selector(comparator)];

El comparador es un selector de mensajes que se envía al objeto que desea ordenar.

Si desea ordenar cadenas, debe utilizar un comparador de NSString. Los comparadores NSString son: caseInsensitiveCompare o localizedCaseInsensitiveCompare :.

Si ninguno de estos son válidos para usted, puede llamar a su propia función de comparación

[values sortedArrayUsingFunction:comparatorFunction context:nil]

Siendo comparatorFunction (de AppleDocumentation )

NSInteger intSort(id num1, id num2, void *context) { int v1 = [num1 intValue]; int v2 = [num2 intValue]; if (v1 < v2) return NSOrderedAscending; else if (v1 > v2) return NSOrderedDescending; else return NSOrderedSame; }


Ordenar las claves y usarlas para rellenar una matriz con los valores:

NSArray *keys = [dict allKeys]; NSArray *sKeys = [keys sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]; NSMutableArray *sValues = [[[NSMutableArray alloc] init] autorelease]; for(id k in sKeys) { id val = [dict objectForKey:k]; [sValues addObject:val]; }


Si desea ordenar los datos en orden ascendente para el ''nombre'' clave para este tipo de Ejemplo, esto puede ayudarlo.

arrayAnimalList = [{''name'' = Dog, ''animal_id'' = 001}, {''name'' = Rat, ''animal_id'' = 002}, {''name'' = Cat, ''animal_id'' = 003}];

Este es un código que te ayuda a ordenar la matriz.

//here you have to pass key for which you want to sort data NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES]; NSArray *sortDescriptors = [NSArray arrayWithObject:descriptor]; // here you will get sorted array in ''sortedArray'' NSMutableArray * sortedArray = [[arrayAnimalList sortedArrayUsingDescriptors:sortDescriptors] mutableCopy];


Utilice este método:

- (NSArray *)sortKeysByIntValue:(NSDictionary *)dictionary { NSArray *sortedKeys = [dictionary keysSortedByValueUsingComparator:^NSComparisonResult(id obj1, id obj2) { int v1 = [obj1 intValue]; int v2 = [obj2 intValue]; if (v1 < v2) return NSOrderedAscending; else if (v1 > v2) return NSOrderedDescending; else return NSOrderedSame; }]; return sortedKeys; }

Llámelo y luego cree un nuevo diccionario con claves ordenadas por valor:

NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys: @"4", @"dog", @"3", @"cat", @"6", @"turtle", nil]; NSArray *sortedKeys = [self sortKeysByIntValue:dictionary]; NSMutableDictionary *sortedDictionary = [[NSMutableDictionary alloc] init]; for (NSString *key in sortedKeys){ [sortedDictionary setObject:dictionary[key] forKey:key]; }


NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"interest" ascending:YES]; [unsortedArray sortUsingDescriptors:[NSArray arrayWithObjects:descriptor,nil]]; recentSortedArray = [stories copy];