我有这种格式的数组
rows = [[NSArray alloc] initWithObjects:@"adam", @"alfred", @"ain", @"abdul", @"anastazja", @"angelica",
@"dennis" , @"deamon", @"destiny", @"dragon", @"dry", @"debug" @"drums",
@"Fredric", @"France", @"friends", @"family", @"fatish", @"funeral",
@"Mark", @"Madeline",
@"Nemesis", @"nemo", @"name",
@"Obama", @"Oprah", @"Omen", @"OMG OMG OMG", @"O-Zone", @"Ontario",
@"Zeus", @"Zebra", @"zed", nil];
但我需要以下格式
rows = @[@[@"adam", @"alfred", @"ain", @"abdul", @"anastazja", @"angelica"],
@[@"dennis" , @"deamon", @"destiny", @"dragon", @"dry", @"debug", @"drums"],
@[@"Fredric", @"France", @"friends", @"family", @"fatish", @"funeral"],
@[@"Mark", @"Madeline"],
@[@"Nemesis", @"nemo", @"name"],
@[@"Obama", @"Oprah", @"Omen", @"OMG OMG OMG", @"O-Zone", @"Ontario"],
@[@"Zeus", @"Zebra", @"zed"]];
表示相同的起始字符到不同的字典
答案 0 :(得分:3)
最简单的方法。
NSArray *rows = ...;
NSMutableDictionary *map = [NSMutableDictionary dictionary];
for (NSString *value in rows) {
NSString *firstLetter = [value substringToIndex:1];
if (!map[firstLetter]) {
map[firstLetter] = @[];
}
NSMutableArray *values = [map[firstLetter] mutableCopy];
[values addObject:value];
map[firstLetter] = values;
}
NSArray *finalRows = [map allValues];
请注意,finalRows
未排序。
答案 1 :(得分:1)
如果你想按照它的第一个字母对数组进行排序,你可以试试这个:
NSMutableArray *outputArray = [NSMutableArray new];
NSString *lastFirstLetter = nil;
for(NSString *value in rows) {
NSString *firstLetter = [[value substringToIndex:1] lowerString];
if(![lastFirstLetter isEqualToString:firstLetter]) {
lastFirstLetter = firstLetter;
[outputArray addObject:[NSMutableArray new]];
}
[[outputArray lastObject] addObject:value];
}
想法是迭代你的输入数组,如果你的单词的第一个字母与先例不同,则创建一个新数组。