我正在尝试索引UITableView
来查看朋友的名字,所以我有一个NSArray
所有朋友的名字,来自AZ,我现在所做的就是计算朋友的数量对于每个字母,例如:A = 20,B = 15,依此类推,并将这些计数放在NSArray
中。
我现在需要做的是尝试将每个名称都放在数组中(示例A字母),然后将此数组存储在NSMutableDictionary
中,如下所示:
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",
);
},
答案 0 :(得分:2)
我不确定你在尝试使用characterSize和计数,我认为更简单的方法是创建一个可变字典,而不是一个可变数组,因为你的数组只包含一个对象,一本字典。所以我会这样做(假设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);
答案 1 :(得分:0)
你似乎选择了一种相当复杂的方式来做到这一点。我会查看NSPredicate
类(例如BEGINSWITH
谓词),然后使用[NSArray filteredArrayUsingPredicate]
方法生成每个字母都带有名称的数组。