根据数组字符转换数组格式

时间:2014-04-26 09:47:54

标签: ios dictionary formatting nsarray

我有这种格式的数组

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"]];

表示相同的起始字符到不同的字典

2 个答案:

答案 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];
} 

想法是迭代你的输入数组,如果你的单词的第一个字母与先例不同,则创建一个新数组。