1

我正在尝试索引一个UITableView将查看朋友姓名的a,所以我有一个NSArray来自AZ的所有朋友姓名,我现在所做的是计算每个字母的朋友数量,例如:A = 20,B = 15,依此类推,并将这些计数放入NSArray.

我现在需要做的是尝试将属于的每个名称(例如字母)放入数组中,然后将此数组存储在 anNSMutableDictionary中,如下所示:

A =         (
        Ali,
        Alaa,
        Asdsd,
        Awer,
        asdft
    );

字母的其余部分也像“A”。

因为我知道每个字母的名称大小(中的大小self.charcherSize)这是我的代码,它分配每个名称属于一个特定的字母并将它们添加到NSMutableArray“名称”中,然后从该字母组完成后将该组添加到NSMutableDictionary“行”和然后将其添加到NSMutableArray“内容”中:

NSMutableArray *content = [NSMutableArray array];
NSMutableDictionary *row = [NSMutableDictionary dictionary];

int startPoint = 0;
for(int i = 0; i < [self.charcherSize count]; i++)
{
    NSMutableArray *names = [NSMutableArray array];
    NSInteger max = [[self.charcherSize objectAtIndex:i] integerValue] + startPoint;

    for (int j = startPoint; j < max; j++) {
        NSDictionary *dic = [self.friendsInfo objectAtIndex:j];

        [names addObject:[dic objectForKey:@"name"]];
    }
    [row setValue:names forKey:charcher];
    [content addObject:row];
    startPoint = max;
}

但问题是NSMutableArray“内容”只保存最后一个字母的值并将这些值复制到所有字典的值中,如下所示:

(
    {
    "A" =         (
        "Zzz",
        "Zzz1",
        "Zzz2",
    );
},
    {
    "B" =         (
        "Zzz",
        "Zzz1",
        "Zzz2",
    );
},
    {
    "C" =         (
        "Zzz",
        "Zzz1",
        "Zzz2",
    );
},
4

2 回答 2

2

我不太确定你想用 characterSize 和 counts 做什么,我认为更简单的方法是创建一个可变字典,而不是一个可变数组,因为你的数组无论如何只包含一个对象,一个字典。所以我会这样做(假设friendsInfo是一个名称数组):

NSMutableDictionary *indexed = [NSMutableDictionary dictionary];
for (NSString *aName in friendsInfo){
    if (![[indexed allKeys] containsObject:[aName substringToIndex:1]]) {
        [indexed setObject:[NSMutableArray arrayWithObject:aName] forKey:[aName substringToIndex:1]];
    }else{
        [[indexed valueForKey:[aName substringToIndex:1]] addObject:aName];

    }
}
    NSLog(@"%@",indexed);
于 2012-08-27T16:18:04.623 回答
0

您似乎选择了一种相当复杂的方法来执行此操作。我会查看NSPredicate类(例如BEGINSWITH谓词),然后使用该[NSArray filteredArrayUsingPredicate]方法生成具有每个字母名称的数组。

于 2012-08-27T16:15:55.110 回答