Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.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
Ios 使用自定义顺序对数组按字母顺序排序_Ios_Arrays_Sorting - Fatal编程技术网

Ios 使用自定义顺序对数组按字母顺序排序

Ios 使用自定义顺序对数组按字母顺序排序,ios,arrays,sorting,Ios,Arrays,Sorting,我试图像音乐应用程序中那样对数组进行排序:ABCDEFG…АББГ…#547368%; 以下是分类: NSString *sortOrder = @"AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZzАаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЭэЮюЯя_0123456789"; NSComparator comp = ^NSComparisonResult(id o

我试图像音乐应用程序中那样对数组进行排序:ABCDEFG…АББГ…#547368%; 以下是分类:

 NSString *sortOrder = @"AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZzАаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЭэЮюЯя_0123456789";
    NSComparator comp = ^NSComparisonResult(id obj1, id obj2)
    {
        char char1 = [(NSString *)obj1 characterAtIndex: 0];
        char char2 = [(NSString *)obj2 characterAtIndex: 0];

        int index1;
        for (index1 = 0; index1 < sortOrder.length; index1++)
            if ([sortOrder characterAtIndex: index1] == char1)
                break;

        int index2;
        for (index2 = 0; index2 < sortOrder.length; index2++)
            if ([sortOrder characterAtIndex: index2] == char2)
                break;

        if (index1 < index2)
            return NSOrderedAscending;
        else if (index1 > index2)
            return NSOrderedDescending;
        else
            return [(NSString *)obj1 compare: obj2 options: NSCaseInsensitiveSearch];
    };
     NSSortDescriptor *sortDescriptor=[[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES comparator:comp];
    arrayOfContactsAndCompanies = (NSMutableArray*)[arrayOfContactsAndCompanies sortedArrayUsingDescriptors:@[sortDescriptor]];
NSString*sortOrder=@“AABBCCDDEEFFGGHHIIJKKLMNNOOPQQRRSSTTUUVWWXXYYZZАааажззззЯаааЯаааааааааааабааааа;
NSComparator comp=^NSComparisonResult(id obj1,id obj2)
{
char char1=[(NSString*)obj1 characterAtIndex:0];
char char2=[(NSString*)obj2 characterAtIndex:0];
int index1;
for(index1=0;index1index2)
退而求其次;
其他的
返回[(NSString*)obj1比较:obj2选项:NSCaseInsensitiveSearch];
};
NSSortDescriptor*sortDescriptor=[[NSSortDescriptor alloc]initWithKey:@“name”升序:是比较器:comp];
ArrayOfContactsAndCompanys=(NSMutableArray*)[ArrayOfContactsAndCompanys使用描述符进行排序:@[sortDescriptor]];
但结果是:ABCDEFG(英文字母)…1235#45(数字)…АББГ(俄文字母)
将俄语字母转换为字符似乎有问题。

问题是当您从字符串中获取字符时:

    char char1 = [(NSString *)obj1 characterAtIndex: 0];
    char char2 = [(NSString *)obj2 characterAtIndex: 0];
由于
char
(8位)的最大值为127,因此当您尝试为该
char
(俄语字母用16位编码)分配更大的值时,会出现未定义的行为

您只需将
char
替换为
unichar
,它就能解决您的问题