Ordenar array en dictionary

Tengo y variedad de muchas cadenas. No quería clasificarlos en un dictionary, así que todas las cadenas que comienzan con la misma letra entran en una matriz y luego la matriz se convierte en el valor de una key; la key sería la letra con la que comienzan todas las palabras en su set de valores.

Ejemplo

Key = "A" >> Value = "array = apple, animal, alphabet, abc ..." Key = "B" >> Value = "array = bat, ball, banana ..." 

¿Cómo puedo hacer eso? ¡Muchas gracias por adelantado!

 NSArray *list = [NSArray arrayWithObjects:@"apple, animal, bat, ball", nil]; NSMutableDictionary *dict = [NSMutableDictionary dictionary]; for (NSString *word in list) { NSString *firstLetter = [[word substringToIndex:1] uppercaseString]; NSMutableArray *letterList = [dict objectForKey:firstLetter]; if (!letterList) { letterList = [NSMutableArray array]; [dict setObject:letterList forKey:firstLetter]; } [letterList addObject:word]; } NSLog(@"%@", dict); 

Puede lograr lo que desea a través de los siguientes pasos:

  1. Crea un dictionary vacío pero mutable.
  2. Obtén el primer personaje.
  3. Si no existe una key para ese personaje, créala.
  4. Agregue la palabra al valor de la key (debe ser un NSMutableArray).
  5. Repita el paso # 2 para todas las teclas.

Aquí está el código Objective-C para estos pasos. Tenga en count que estoy asumiendo que desea que las teclas no sean sensibles a mayúsculas y minúsculas .

 // create our dummy dataset NSArray * wordArray = [NSArray arrayWithObjects:@"Apple", @"Pickle", @"Monkey", @"Taco", @"arsenal", @"punch", @"twitch", @"mushy", nil]; // setup a dictionary NSMutableDictionary * wordDictionary = [[NSMutableDictionary alloc] init]; for (NSString * word in wordArray) { // remove uppercaseString if you wish to keys case sensitive. NSString * letter = [[word substringWithRange:NSMakeRange(0, 1)] uppercaseString]; NSMutableArray * array = [wordDictionary objectForKey:letter]; if (!array) { // the key doesn't exist, so we will create it. [wordDictionary setObject:(array = [NSMutableArray array]) forKey:letter]; } [array addObject:word]; } NSLog(@"Word dictionary: %@", wordDictionary); 

Echa un vistazo a este tema, solucionan casi el mismo problema que tú: filtrando NSArray en un nuevo NSArray en objective-c. Avísame si no ayuda, por lo que escribiré para ti una muestra de código más.

Use esto para orderar los contenidos de la matriz en order alfabético, además diseñará el requisito

[keywordListArr sortUsingSelector: @selector (localizedCaseInsensitiveCompare :)];

Acabo de escribir esta muestra. Parece simple y hace lo que necesita.

 NSArray *names = [NSArray arrayWithObjects:@"Anna", @"Antony", @"Jack", @"John", @"Nikita", @"Mark", @"Matthew", nil]; NSString *alphabet = @"ABCDEFGHIJKLMNOPQRSTUWXYZ"; NSMutableDictionary *sortedNames = [NSMutableDictionary dictionary]; for(int characterIndex = 0; characterIndex < 25; characterIndex++) { NSString *alphabetCharacter = [alphabet substringWithRange:NSMakeRange(characterIndex, 1)]; NSArray *filtenetworkingNames = [names filtenetworkingArrayUsingPnetworkingicate:[NSPnetworkingicate pnetworkingicateWithFormat:@"SELF BEGINSWITH[C] %@", alphabetCharacter]]; [sortedNames setObject:filtenetworkingNames forKey:alphabetCharacter]; } //Just for testing purposes let's take a look into our sorted data for(NSString *key in sortedNames) { for(NSString *value in [sortedNames valueForKey:key]) { NSLog(@"%@:%@", key, value); } }