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: >)
复制代码
本文详细介绍了如何在Objective-C和Swift中创建自定义对象,并实现对象间的大小比较,进而通过不同的排序方法对自定义对象数组进行升序和降序排列。包括使用Comparator、Selector和Descriptor等方式。
223

被折叠的 条评论
为什么被折叠?



