ios - 使用自定义顺序按字母顺序排列数组

标签 ios arrays sorting

我正在尝试像在音乐应用程序中一样对数组进行排序: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]];

但结果是:ABCDEFG(英文字母)..1235#45(数字)..АБВГ(俄文字母) 将俄语字母转换为 char 似乎有问题。

最佳答案

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

    char char1 = [(NSString *)obj1 characterAtIndex: 0];
    char char2 = [(NSString *)obj2 characterAtIndex: 0];

由于 char(8 位)的最大值是 127,当您尝试为该 char 分配更大的值时,您会得到未定义的行为(俄文字母是用 16 位编码)。

您只需将 char 替换为 unichar 即可解决您的问题。

关于ios - 使用自定义顺序按字母顺序排列数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25118401/

相关文章:

IOS/swift : Save the cell selection on UITableView

Javascript:对多维数组进行排序

java - 使用ES java库准备嵌套排序过滤器

java - 从文本文件中读取整数并存储到数组中

javascript - 有办法到 "compress"以下所以不会那么长

java - 每个项目有 2 个值的数组

Python 对字典列表进行排序

ios - AFNetworking 与 session 管理 iOS

ios - Firebase Auth 不起作用,但适用于 friend ,很快

ios - 我如何关闭 overCurrentContext 模态 viewController 及其子项?