我需要从另一个NSNumber
生成一个排序的NSArray
数组。我想使用sortedArrayUsingComparator:
方法。我在Apple文档中找到了这个例子:
NSArray *sortedArray = [array sortedArrayUsingComparator: ^(id obj1, id obj2) {
if ([obj1 integerValue] > [obj2 integerValue]) {
return (NSComparisonResult)NSOrderedDescending;
}
if ([obj1 integerValue] < [obj2 integerValue]) {
return (NSComparisonResult)NSOrderedAscending;
}
return (NSComparisonResult)NSOrderedSame;
}];
在这里,我只是在一个块中提供比较器,这很好。排序本身--对我隐藏的部分,使用这个块--看起来是升序的。
我想知道我是否可以在这个NSOrderedXXX
块之外请求一个不同的排序顺序,或者我只需要颠倒<
和>
(或NSOrderedXXX
)的排序顺序?
发布于 2011-11-09 02:01:53
如果您想要降序排序,那么只需翻转比较(或翻转NSComparisonResult
)。当您可以在块中直接控制时,不需要通过使用ascending:
参数来膨胀API。
发布于 2011-11-09 02:02:06
只需更改逻辑:
NSArray *sortedArray = [array sortedArrayUsingComparator: ^(id obj1, id obj2) {
if ([obj1 integerValue] > [obj2 integerValue]) {
return (NSComparisonResult)NSOrderedAscending;
}
if ([obj1 integerValue] < [obj2 integerValue]) {
return (NSComparisonResult)NSOrderedDescending;
}
return (NSComparisonResult)NSOrderedSame;
}];
为清楚起见,最好将此方法命名为类似于:decendingSort
的方法。
发布于 2011-11-09 02:02:22
来自-sortedArrayUsingComparator:
的文档:
返回一个数组,该数组按给定NSComparator块指定的比较方法确定的升序列出接收数组的元素。
所以你不得不求助于使用
- (NSArray *)sortedArrayUsingDescriptors:(NSArray *)sortDescriptors
当然,这意味着首先滚动您自己的NSSortDescriptor对象,这可能正好适合您的目的。
https://stackoverflow.com/questions/8054921
复制相似问题