首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用数字作为字符串进行NSSortDescriptor排序?

用数字作为字符串进行NSSortDescriptor排序?
EN

Stack Overflow用户
提问于 2012-03-30 13:30:32
回答 2查看 5.8K关注 0票数 11

得到了一个充满字典的数组,如下所示:

代码语言:javascript
运行
复制
(
   { order = "10";
     name = "David"
   };
   { order = "30";
     name = "Jake";
   };
   { order = "200";
     name = "Michael";
   };
)

当我像下面的代码一样使用NSSortDescriptor时,它只对第一个字符排序,所以200低于30。当然,我可以将"order“对象更改为NSNumber,而不是字符串,这样就可以工作了。但是,有没有一种方法可以在不更改源对象的情况下将字符串排序为int值?

代码语言:javascript
运行
复制
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"norder"  ascending:YES];
[departmentList sortUsingDescriptors:[NSArray arrayWithObjects:descriptor,nil]];

更新:

多亏了bandejapaisa。

以下是iOS 5的工作版本(Xcode在其中进行比较)。

代码语言:javascript
运行
复制
NSArray *sortedArray;
sortedArray = [departmentList sortedArrayUsingComparator:(NSComparator)^(id a, id b) {
    NSNumber *num1 = [NSNumber numberWithInt:[[a objectForKey:@"norder"] intValue]];
    NSNumber *num2 = [NSNumber numberWithInt:[[b objectForKey:@"norder"] intValue]];

    return [num1 compare:num2];
}];
departmentList = [sortedArray mutableCopy];
EN

回答 2

Stack Overflow用户

发布于 2012-03-30 14:08:19

使用NSNumber太过分了。通过执行以下操作,您可以节省大量开销:

代码语言:javascript
运行
复制
NSArray *sortedArray = [someArray sortedArrayUsingComparator:^(id obj1, id obj2) {
    return (NSComparisonResult) [obj1 intValue] - [obj2 intValue];
}];
票数 10
EN

Stack Overflow用户

发布于 2016-07-26 09:15:28

以上所有方法都需要良好的基础知识才能实现,但对于新生来说,我建议最简单的方法是使用本机块方法,希望这会有所帮助。

代码语言:javascript
运行
复制
NSArray* sortedArr =[fetchResults sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {

int aValue = [[a valueForKey:@"subgroupId"] intValue];
int bValue = [[b valueForKey:@"subgroupId"] intValue];

return aValue>bValue; }];

快乐的编码..。

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

https://stackoverflow.com/questions/9943970

复制
相关文章

相似问题

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