使用初始名称创buildNSDictionary进行sorting

我试图将这个链接的代码合并到我自己的应用程序中,同时使用我自己的字典。 然而,我有几个问题。

我的代码生成这种types的字典(因为我正在使用Web服务从MySQL数据库中获取这些数据):

{audiences = ({ name = ABDUL; id = 1; },{ name = ELSA; id = 2; },...etc)} 

不过,我想要一个像这样的字典:

 audiences = @{@"B" : @[@"Bear", @"Black Swan", @"Buffalo"], @"C" : @[@"Camel", @"Cockatoo"], @"D" : @[@"Dog", @"Donkey"]}; 

在我的情况下,这将是这样的:

 audience = @{@"A":@[@"Abdul"], @"E":@[@"Elsa"]}; 

总结我的问题:1)如何创build一个NSDictionary只使用name (无id )? 2)包含最初的字典

感谢您的帮助,我是Xcode和Objective-C的新手,所以请原谅我,如果我问一个noob问题。 另外,请忍受我的坏英语。 提前致谢。

因此,从Web服务接收到的初始数据结构(在Cocoa中重新表示):

 NSDictionary* data = @{ @"audiences" : @[ @{ @"name" : @"ABDUL", @"id" : @1 }, @{ @"name" : @"ELSA", @"id" : @2 }, ] }; 

你可以像这样构build你描述的数据结构:

 NSMutableDictionary* audience = [NSMutableDictionary dictionary]; for (NSDictionary* person in data[@"audiences"]) { NSString* name = person[@"name"]; if (![name length]) continue; NSRange range = [name rangeOfComposedCharacterSequenceAtIndex:0]; NSString* key = [[name substringWithRange:range] uppercaseString]; NSMutableArray* list = audience[key]; if (!list) { list = [NSMutableArray array]; [audience setObject:list forKey:key]; } [list addObject:name]; } 

我会假设你不想让首字母大写。

 NSArray *audiences = @[ @{ @"name" : @"ABDUL", @"id" : @1 }, @{ @"name" : @"ELSA", @"id" : @2 }, @{ @"name" : @"erik erikson", @"id" : @3 }, @{ @"name" : @"Leeroy Jenkins", @"id" : @-1 }, @{ @"name" : @"", @"id" : @4 }, ]; NSMutableDictionary *audienceMembersByInitial = [NSMutableDictionary dictionary]; for (NSDictionary *audienceMember in audiences) { NSString *name = audienceMember[@"name"]; if (name.length > 0) { NSString *initial = [[name substringToIndex:1] uppercaseString]; NSArray *audienceMembersWithInitial = audienceMembersByInitial[initial] ?: @[]; audienceMembersByInitial[initial] = [audienceMembersWithInitial arrayByAddingObject:name]; } } return [audienceMembersByInitial copy]; 

输出是…

 @{ @"A" : @[ @"ABDUL" ], @"E" : @[ @"ELSA", @"erik erikson" ], @"L" : @[ @"Leeroy Jenkins" ], };