首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的NSSortDescriptor排序方法不能很好地工作?

为什么我的NSSortDescriptor排序方法不能很好地工作?
EN

Stack Overflow用户
提问于 2013-05-13 23:18:21
回答 2查看 555关注 0票数 1

我使用NSPredicate过滤表结果

代码语言:javascript
运行
复制
   NSPredicate *resultPredicate = [NSPredicate
                                    predicateWithFormat:@"Name CONTAINS[cd] %@ OR Address CONTAINS[cd] %@",
                                    searchText,
                                    searchText];

    searchResults = [NSMutableArray array];

    for (key in dict) {

        if ([resultArray containsObject:key]) {

            NSArray *array = [dict objectForKey:key];
            matches = [array filteredArrayUsingPredicate:resultPredicate];

            if (matches.count > 0) {

                [searchResults addObjectsFromArray:matches];
                // sorting array
                NSSortDescriptor *sort=[NSSortDescriptor sortDescriptorWithKey:@"Distance" ascending:YES];
                [searchResults sortUsingDescriptors:[NSArray arrayWithObject:sort]];
            }

        }
    }

    }

然后使用NSSortDescriptor对结果数组进行排序

代码语言:javascript
运行
复制
NSSortDescriptor *sort=[NSSortDescriptor sortDescriptorWithKey:@"Distance" ascending:YES];
                [searchResults sortUsingDescriptors:[NSArray arrayWithObject:sort]];

它是有效的,但不是所有的结果:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-13 23:25:16

排序不正确,因为它将Distance解释为字符串,而不是数字。字符串是按字典顺序排序的,这意味着100.00 km2.00 km之前,因为100.00 km的起始数字1小于2.00 km的起始数字2

您可以通过在表示距离时使用NSNumber代替NSString来解决这个问题,或者通过用零填充所有值来强制使用相同的位数,以获得相同的长度。

票数 5
EN

Stack Overflow用户

发布于 2013-05-13 23:26:09

您应该对数字进行排序,这是以米为单位的归一化距离,而不是显示字符串(在中使用数字对字符串进行排序需要不同的逻辑)。

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

https://stackoverflow.com/questions/16525554

复制
相关文章

相似问题

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