首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >α数字NSSortDescriptor排序

α数字NSSortDescriptor排序
EN

Stack Overflow用户
提问于 2012-01-26 22:03:08
回答 2查看 375关注 0票数 0

我试图以类似于iTunes的方式从“跟踪”的CoreData“表”中对结果进行排序。问题是,"ASC“排序使用第一个字符进行排序,因此我最终得到:

  1. (我无法得到)满意
  2. A艰难的白天夜

我希望Stones在结果中显示出"I",基本上忽略了任何^A-Za-z0-9。我尝试过一个自定义选择器和比较器块,但是它忽略了它,所以我被卡住了。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-26 22:09:42

根据我的经验,最好有一个在创建对象时生成的sortName属性。然后,您可以使用该键对CoreData结果进行排序,以一种更简单、更快的方式进行排序。

票数 2
EN

Stack Overflow用户

发布于 2012-01-26 23:24:58

另一种解决方案是在获取结果后手动排序:

代码语言:javascript
运行
复制
[tracks sortUsingComparator:^NSComparisonResult(id obj1, id obj2)
{
    NSError *error = nil;
    NSString *pattern = @"[^A-Za-z0-9]";
    NSRegularExpression *expr = [NSRegularExpression regularExpressionWithPattern:pattern
                                                                          options:NSRegularExpressionCaseInsensitive
                                                                            error:&error];

    NSString *title1 = [(Track *)obj1 title];
    NSString *title2 = [(Track *)obj2 title];

    NSString *title1Match = [expr stringByReplacingMatchesInString:title1
                                                           options:0
                                                             range:NSMakeRange(0, [title1 length])
                                                      withTemplate:@""];
    NSString *title2Match = [expr stringByReplacingMatchesInString:title2
                                                           options:0
                                                             range:NSMakeRange(0, [title2 length])
                                                      withTemplate:@""];

    return [title1Match compare:title2Match options:NSCaseInsensitiveSearch];
}];

我也尝试了\W的模式,但似乎有一个巨大的性能成功。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9026059

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档