iOS 日常排序

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 排序

降序则把 lhsrhs 颠倒位置

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: >)
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值