如何返回一个数组,其中包含另一个数组中所有对象的首字母?

时间:2009-08-10 17:19:46

标签: iphone arrays uitableview sorting

我正在努力将普通的tableview转换为分段的tableview。我希望节标题是该节中项目的第一个字母。

这是我目前在titleForHeaderInSection方法中所拥有的:

NSSortDescriptor *sortDescriptor;
sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"Name"
                                              ascending:YES] autorelease];
NSArray *sortedArray;
NSMutableArray *commonNameArray = [tableDataSource valueForKey:@"Name"];

NSArray *uniquearray;
uniquearray = [[NSSet setWithArray:commonNameArray] allObjects];
sortedArray = [uniquearray sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];

此代码删除重复的标题并按字母顺序对列表进行排序。现在我只需要将数组中的字符串转换为第一个字母。最好的方法是什么?

2 个答案:

答案 0 :(得分:7)

NSMutableSet *firstCharacters = [NSMutableSet setWithCapacity:0];
for( NSString *string in [tableDataSource valueForKey:@"Name"] )
    [firstCharacters addObject:[string substringToIndex:1]];

NSArray *uniquearray = [[firstCharacters allObjects] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];

答案 1 :(得分:0)

感谢您的帮助。在一个难得的灵感时刻,我才开始工作。这就是我做的。这样做的人看错了吗?

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
     NSSortDescriptor *sortDescriptor;
     sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"CommonName"
                ascending:YES] autorelease];
     NSArray *sortedArray;
     NSMutableArray *commonNameArray = [tableDataSource valueForKey:@"CommonName"];

     NSArray *uniquearray;
     uniquearray = [[NSSet setWithArray:commonNameArray] allObjects];
     sortedArray = [uniquearray sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];

     NSString *stringForFirstLetter = [[sortedArray objectAtIndex:section] substringToIndex:1];

return stringForFirstLetter;}