Objective-C
1. 自定义对象
@interface MyNumber : NSObject
@property (assign) int value;
@end
@implementation MyNumber
- (instancetype)initWithValue:(int)value
{
self = [super init];
if (self) {
self.value = value;
}
return self;
}
@end
复制代码
2. 让自定义对象可以比较大小
(value
从小到大认为升序)
@implementation MyNumber (Compare)
- (NSComparisonResult)compare:(MyNumber *)other
{
if (self.value > other.value) {
return NSOrderedDescending;
}
else if (self.value < other.value) {
return NSOrderedAscending;
}
else {
return NSOrderedSame;
}
}
@end
复制代码
3. 测试数据
MyNumber *num1 = [[MyNumber alloc] initWithValue:1];
MyNumber *num2 = [[MyNumber alloc] initWithValue:2];
MyNumber *num3 = [[MyNumber alloc] initWithValue:3];
NSArray *sourceArray = @[num2, num3, num1];
复制代码
4. 用 Comparator 排序
降序则把 lhs
和 rhs
颠倒位置
NSArray *sortedArray = [sourceArray sortedArrayUsingComparator:^ NSComparisonResult(MyNumber *lhs, MyNumber *rhs) {
return [lhs compare:rhs];
}];
复制代码
5. 用 Selector 排序
NSArray *sortedArray = [sourceArray sortedArrayUsingSelector:@selector(compare:)];
复制代码
6. 用 Descriptor 排序
不依赖 compare
的方式
NSArray *sortedArray = [sourceArray sortedArrayUsingDescriptors:@[[[NSSortDescriptor alloc] initWithKey:@"value" ascending:YES]]];
复制代码
依赖 compare
的方式
NSArray *sortedArray = [sourceArray sortedArrayUsingDescriptors:@[[[NSSortDescriptor alloc] initWithKey:@"value" ascending:YES selector:@selector(compare:)]]];
复制代码
Swift
1. 自定义对象
struct MyNumber {
var value: Int
}
复制代码
2. 让自定义对象可以比较大小
extension MyNumber: Comparable {
static func < (lhs: MyNumber, rhs: MyNumber) -> Bool {
return lhs.value < rhs.value
}
}
复制代码
3. 测试数据
let num1 = MyNumber(value: 1)
let num2 = MyNumber(value: 2)
let num3 = MyNumber(value: 3)
let sourceArray = [num1, num2, num3]
复制代码
4. 升序
let sortedArray = sourceArray.sorted()
复制代码
5. 降序
let sortedArray = sourceArray.sorted(by: >)
复制代码