NSSortDescriptor和SortedArrayUsingSelector有什么区别

时间:2014-11-07 02:15:05

标签: objective-c arrays sorting

我试图按长度排序字符串数组。 NSSortDescriptor工作但不是SortedArrayUsingSelector。

为什么?

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"length" ascending:NO];

[inputArray sortUsingDescriptors:@[sortDescriptor]];

[inputArray sortedArrayUsingSelector:@selector(length)];

1 个答案:

答案 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:)];