Iphone 为按字母顺序排序的列表编制索引
我有一个数组,其中的对象列表按字母顺序排序,忽略字母大小写,使用小写方法,我需要将其排序为数组数组,每个字母一个,非字母字符1个 一个简单的方法是在源数组中循环使用一个27堆栈深的if-else。。。。不用说,我不认为这是一个很好的解决方案,所以我在想,如果我可以将排序依据的字符串的第一个字母转换为int,那么我可以使用它来计算索引,将对象排序为int 因此,我需要帮助来实现这一点或找到更好的方法Iphone 为按字母顺序排序的列表编制索引,iphone,objective-c,cocoa-touch,sorting,indexing,Iphone,Objective C,Cocoa Touch,Sorting,Indexing,我有一个数组,其中的对象列表按字母顺序排序,忽略字母大小写,使用小写方法,我需要将其排序为数组数组,每个字母一个,非字母字符1个 一个简单的方法是在源数组中循环使用一个27堆栈深的if-else。。。。不用说,我不认为这是一个很好的解决方案,所以我在想,如果我可以将排序依据的字符串的第一个字母转换为int,那么我可以使用它来计算索引,将对象排序为int 因此,我需要帮助来实现这一点或找到更好的方法 我在iPhone平台上工作,因此我可以访问cocoa和core apple Library。在常规
我在iPhone平台上工作,因此我可以访问cocoa和core apple Library。在常规c中,str[0]-“a”将为以小写字母开头的字符串提供0到25之间的整数。然后只有一个if来检查非字母首字母字符。在常规c中,str[0]-“a”将为以小写字母开头的字符串提供一个0到25之间的整数。然后,您只需要一个if来检查非alpha初始字符。您可以使用排序的NSMutableArray,它将保存27个字母的NSMutableArray对象,每个对象都保存您的对象 您还可以使用包含26个字母的NSArray作为NSString对象,并使用indexOfObject:要从字母数组的排序数组中获取索引,如果该对象返回NSNotFound,则应将其添加到该字母数组中,请使用26作为索引,因为这是非alpha数组 例如,如果要对NSString对象进行排序,可以如下操作:
NSArray *originalArray = [NSArray arrayWithObjects:@"A object",@"B object",@"C object",@"123 object",nil];
// init with all 26 lowercase letters here
NSArray *letters = [NSArray arrayWithObjects:@"a",@"b",@"c",nil];
// create sorted and letter arrays
NSMutableArray *sortedArray = [[NSMutableArray alloc] initWithCapacity:[letters count]+1];
for (int i = 0; i < [letters count] + 1; i++) {
// use an appropriate capacity here
NSMutableArray *letterArray = [[NSMutableArray alloc] initWithCapacity:10];
[sortedArray addObject:letterArray];
[letterArray release];
}
// sort originalArray into sortedArray
for (NSString *string in originalArray) {
NSString *firstLetter = [[string substringWithRange:[string rangeOfComposedCharacterSequenceAtIndex:0]] lowercaseString];
int index = [letters indexOfObject:firstLetter];
if (index == NSNotFound) {
// use non-alpha array
index = [letters count];
}
NSMutableArray *letterArray = [sortedArray objectAtIndex:index];
[letterArray addObject:string];
}
NSLog(@"%@",sortedArray);
您可以使用已排序的NSMutableArray,它将包含27个字母的NSMutableArray对象,每个对象都包含您的对象 您还可以使用包含26个字母的NSArray作为NSString对象,并使用indexOfObject:要从字母数组的排序数组中获取索引,如果该对象返回NSNotFound,则应将其添加到该字母数组中,请使用26作为索引,因为这是非alpha数组 例如,如果要对NSString对象进行排序,可以如下操作:
NSArray *originalArray = [NSArray arrayWithObjects:@"A object",@"B object",@"C object",@"123 object",nil];
// init with all 26 lowercase letters here
NSArray *letters = [NSArray arrayWithObjects:@"a",@"b",@"c",nil];
// create sorted and letter arrays
NSMutableArray *sortedArray = [[NSMutableArray alloc] initWithCapacity:[letters count]+1];
for (int i = 0; i < [letters count] + 1; i++) {
// use an appropriate capacity here
NSMutableArray *letterArray = [[NSMutableArray alloc] initWithCapacity:10];
[sortedArray addObject:letterArray];
[letterArray release];
}
// sort originalArray into sortedArray
for (NSString *string in originalArray) {
NSString *firstLetter = [[string substringWithRange:[string rangeOfComposedCharacterSequenceAtIndex:0]] lowercaseString];
int index = [letters indexOfObject:firstLetter];
if (index == NSNotFound) {
// use non-alpha array
index = [letters count];
}
NSMutableArray *letterArray = [sortedArray objectAtIndex:index];
[letterArray addObject:string];
}
NSLog(@"%@",sortedArray);