ios object-c 对数组里面的DataMode进行排序 DataMode有年月日 NSInteger year; NSInteger month;NSInteger day;年月日越大的值排越前面
可以使用NSArray的sortedArrayUsingComparator:方法来对数组中的DataMode对象进行排序。
首先,定义一个比较器的block,用来比较两个DataMode对象的年月日大小。比较器的返回值是NSComparisonResult类型,根据比较结果返回NSOrderedAscending、NSOrderedSame或NSOrderedDescending。
typedef NSComparisonResult (^DataModeComparator)(DataMode *, DataMode *);
DataModeComparator comparator = ^NSComparisonResult(DataMode *obj1, DataMode *obj2) {
if (obj1.year > obj2.year) {
return NSOrderedAscending;
} else if (obj1.year < obj2.year) {
return NSOrderedDescending;
} else {
if (obj1.month > obj2.month) {
return NSOrderedAscending;
} else if (obj1.month < obj2.month) {
return NSOrderedDescending;
} else {
if (obj1.day > obj2.day) {
return NSOrderedAscending;
} else if (obj1.day < obj2.day) {
return NSOrderedDescending;
} else {
return NSOrderedSame;
}
}
}
};
然后,调用sortedArrayUsingComparator:方法对数组进行排序。这个方法会返回一个新的已排序的数组,原数组不会被修改。
NSArray *sortedArray = [array sortedArrayUsingComparator:comparator];
完整的示例代码如下:
// 定义 DataMode 类
@interface DataMode : NSObject
@property (nonatomic, assign) NSInteger year;
@property (nonatomic, assign) NSInteger month;
@property (nonatomic, assign) NSInteger day;
@end
@implementation DataMode
@end
// 排序方法
- (void)sortDataModes {
// 原始数据数组
DataMode *dataMode1 = [[DataMode alloc] init];
dataMode1.year = 2022;
dataMode1.month = 8;
dataMode1.day = 1;
DataMode *dataMode2 = [[DataMode alloc] init];
dataMode2.year = 2021;
dataMode2.month = 12;
dataMode2.day = 31;
DataMode *dataMode3 = [[DataMode alloc] init];
dataMode3.year = 2022;
dataMode3.month = 1;
dataMode3.day = 15;
NSArray *array = @[dataMode1, dataMode2, dataMode3];
// 比较器
typedef NSComparisonResult (^DataModeComparator)(DataMode *, DataMode *);
DataModeComparator comparator = ^NSComparisonResult(DataMode *obj1, DataMode *obj2) {
if (obj1.year > obj2.year) {
return NSOrderedAscending;
} else if (obj1.year < obj2.year) {
return NSOrderedDescending;
} else {
if (obj1.month > obj2.month) {
return NSOrderedAscending;
} else if (obj1.month < obj2.month) {
return NSOrderedDescending;
} else {
if (obj1.day > obj2.day) {
return NSOrderedAscending;
} else if (obj1.day < obj2.day) {
return NSOrderedDescending;
} else {
return NSOrderedSame;
}
}
}
};
// 排序
NSArray *sortedArray = [array sortedArrayUsingComparator:comparator];
// 输出排序结果
for (DataMode *dataMode in sortedArray) {
NSLog(@"%ld-%ld-%ld", dataMode.year, dataMode.month, dataMode.day);
}
}
输出结果为:
2021-12-31
2022-1-15
2022-8-1
``
原文地址: https://www.cveoy.top/t/topic/iDHa 著作权归作者所有。请勿转载和采集!