Jor*_*eña 34 iphone cocoa objective-c
我有一个NSArray的NSNumber,我已经成功地整理利用以下升序排列对象:
[myArray sortedArrayUsingSelector:@selector(compare:)]
Run Code Online (Sandbox Code Playgroud)
但是,我需要按降序排序.我认为compare:它只按升序排序.虽然我可以解决这个问题NSArray,但我很好奇是否有更简单或更有效的方法来实现这一目标.
编辑:我发现这个问题提供了一种简单的反向迭代方法NSArray:
for (id someObject in [myArray reverseObjectEnumerator])
Run Code Online (Sandbox Code Playgroud)
这工作正常,我想这是一个很好的简单解决方案,但我很好奇是否有一种方法来按降序指定排序.
Jer*_*myP 80
使用排序描述符
NSSortDescriptor* sortOrder = [NSSortDescriptor sortDescriptorWithKey: @"self"
ascending: NO];
return [myArray sortedArrayUsingDescriptors: [NSArray arrayWithObject: sortOrder]];
Run Code Online (Sandbox Code Playgroud)
vod*_*ang 12
另一种方式,imo,也很好:用类别写另一个reverseCompare:
@implementation NSNumber (Utility)
- (NSComparisonResult)reverseCompare:(NSNumber *)aNumber {
return [aNumber compare:self];
}
Run Code Online (Sandbox Code Playgroud)
好处是你可以在任何地方重用,而不必用反向迭代来编写循环.不好的是你必须写更多的代码:)
有几种方法:
sortUsingFunction:context:.sortUsingComparator:,需要一个块.(仅适用于Mac OS X 10.6及更高版本以及iOS 4.0及更高版本.)sortUsingDescriptors:,并传递至少一个ascending属性为false的排序描述符的数组.在前两种情况下,您的比较应该简单地返回您通常使用的比较器(例如,compare:)返回的否定.最后一个涉及较少的自定义代码,所以这就是我使用的.
像这样使用sortarrayusingcomparator方法
NSArray *sortedArray = [array sortedArrayUsingComparator:
^NSComparisonResult(id obj1, id obj2){
return [obj2 compare:obj1];
}];
Run Code Online (Sandbox Code Playgroud)
通过反转对象的顺序,您将获得降序
| 归档时间: |
|
| 查看次数: |
43185 次 |
| 最近记录: |