可以使用NSArraysortedArrayUsingComparator:方法来对数组中的DataMode对象进行排序。

首先,定义一个比较器的block,用来比较两个DataMode对象的年月日大小。比较器的返回值是NSComparisonResult类型,根据比较结果返回NSOrderedAscendingNSOrderedSameNSOrderedDescending

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
``
ios object-c 对数组里面的DataMode进行排序 DataMode有年月日 NSInteger year; NSInteger month;NSInteger day;年月日越大的值排越前面

原文地址: https://www.cveoy.top/t/topic/iDHa 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录