Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 为按字母顺序排序的列表编制索引_Iphone_Objective C_Cocoa Touch_Sorting_Indexing - Fatal编程技术网

Iphone 为按字母顺序排序的列表编制索引

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。在常规

我有一个数组,其中的对象列表按字母顺序排序,忽略字母大小写,使用小写方法,我需要将其排序为数组数组,每个字母一个,非字母字符1个

一个简单的方法是在源数组中循环使用一个27堆栈深的if-else。。。。不用说,我不认为这是一个很好的解决方案,所以我在想,如果我可以将排序依据的字符串的第一个字母转换为int,那么我可以使用它来计算索引,将对象排序为int

因此,我需要帮助来实现这一点或找到更好的方法


我在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);