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