得到了一个充满字典的数组,如下所示:
(
{ order = "10";
name = "David"
};
{ order = "30";
name = "Jake";
};
{ order = "200";
name = "Michael";
};
)当我像下面的代码一样使用NSSortDescriptor时,它只对第一个字符排序,所以200低于30。当然,我可以将"order“对象更改为NSNumber,而不是字符串,这样就可以工作了。但是,有没有一种方法可以在不更改源对象的情况下将字符串排序为int值?
NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"norder" ascending:YES];
[departmentList sortUsingDescriptors:[NSArray arrayWithObjects:descriptor,nil]];更新:
多亏了bandejapaisa。
以下是iOS 5的工作版本(Xcode在其中进行比较)。
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];发布于 2012-03-30 14:08:19
使用NSNumber太过分了。通过执行以下操作,您可以节省大量开销:
NSArray *sortedArray = [someArray sortedArrayUsingComparator:^(id obj1, id obj2) {
return (NSComparisonResult) [obj1 intValue] - [obj2 intValue];
}];发布于 2016-07-26 09:15:28
以上所有方法都需要良好的基础知识才能实现,但对于新生来说,我建议最简单的方法是使用本机块方法,希望这会有所帮助。
NSArray* sortedArr =[fetchResults sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
int aValue = [[a valueForKey:@"subgroupId"] intValue];
int bValue = [[b valueForKey:@"subgroupId"] intValue];
return aValue>bValue; }];快乐的编码..。
https://stackoverflow.com/questions/9943970
复制相似问题