我试图按长度排序字符串数组。 NSSortDescriptor工作但不是SortedArrayUsingSelector。
为什么?
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"length" ascending:NO];
[inputArray sortUsingDescriptors:@[sortDescriptor]];
和
[inputArray sortedArrayUsingSelector:@selector(length)];
答案 0 :(得分:1)
sortedArrayUsingSelector:
方法的调用返回一个已排序的数组,保持原始数组不变。另一方面,sortUsingDescriptors:
对可变数组进行了排序。
另一个问题是length
返回一个原语,而用于排序的选择器应该返回一个比较结果:
@interface NSString(MyAdditions)
-(NSComparisonResult)compareLength:(NSString*)other;
@end
@implementation NSString(MyAdditions)
-(NSComparisonResult)compareLength:(NSString*)other {
NSInteger a = self.length;
NSInteger b = other.length;
if (a==b) return NSOrderedSame;
return a<b ? NSOrderedAscending : NSOrderedDescending;
}
@end
...
NSArray *sorted = [inputArray sortedArrayUsingSelector:@selector(compareLength:)];
你会得到你期望的结果。您还可以使用sortArrayUsingSelector:
[inputArray sortUsingSelector:@selector(compareLength:)];