我有一个表视图,其数据源来自一个包含人名的数组。
现在为了方便查找人员,我想对表格视图进行分区,使其右侧有字母A-Z,就像地址簿应用程序一样。
但是我当前的数组只包含NSStrings
的集合。如何拆分它们以便按名称的第一个字母分组?有没有方便的方法呢?
编辑:如果有人对我的最终代码感兴趣:
NSMutableArray *arrayChars = [[NSMutableArray alloc] init];
for (char i = 'A'; i <= 'Z' ; i++) {
NSMutableDictionary *characterDict = [[NSMutableDictionary alloc]init];
NSMutableArray *tempArray = [[NSMutableArray alloc] init];
for (int k = 0; k < [myList count]; k++) {
NSString *currentName = [[friends objectAtIndex:k] objectForKey:@"name"];
char heading = [currentName characterAtIndex:0];
heading = toupper(heading);
if (heading == i) {
[tempArray addObject:[friends objectAtIndex:k]];
}
}
[characterDict setObject:tempArray forKey:@"rowValues"];
[characterDict setObject:[NSString stringWithFormat:@"%c",i] forKey:@"headerTitle"];
[arrayChars addObject:characterDict];
[characterDict release];
[tempArray release];
}
在函数结束时我会:
arrayChars [0] = dictionary(headerTitle = 'A', rowValues = {"adam", "alice", etc})
arrayChars[1] = dictionary(headerTitle = 'B', rowValues = {"Bob", etc})
谢谢大家的帮助!
答案 0 :(得分:2)
您可以使用字典对它们进行排序,因此创建一个包含您要排序的所有字母的数组和一个包含nil对象的数组来初始化字典
NSArray *names = @[@"javier",@"juan", @"pedro", @"juan", @"diego"];
NSArray *letters = @[@"j", @"p", @"d"];
NSMutableArray *objects = [[NSMutableArray alloc] init];
for (NSInteger i = 0; i < [letters count]; ++i)
{
[objects addObject:[[NSMutableArray alloc] init]];
}
NSDictionary *dictionary = [[NSDictionary alloc] initWithObjects:objects forKeys:letters];
然后你必须找到第一个字母,如果单词并将该单词放入字典中的相应键
for (NSString *name in names) {
NSString *firstLetter = [name substringToIndex:1];
for (NSString *letter in letters) {
if ([firstLetter isEqualToString:letter]) {
NSMutableArray *currentObjects = [dictionary objectForKey:letter];
[currentObjects addObject:name];
}
}
}
要检查您是否可以直接打印字典
NSLog(@"%@", dictionary);
然后,您的工作是使用字典填充tableview中的部分