You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS开发:如何对包含年月组合的NSString数组进行降序排序?

解决iOS年月字符串数组的排序问题

首先我得先指出你代码里的几个关键问题,这些问题直接导致你没得到预期结果:

  • 数组初始化错误:你当前创建的array其实只包含一个字符串元素(整个逗号分隔的内容),而不是多个独立的年月字符串,得先把这个字符串拆分成单独的元素数组才能正常排序。
  • 日期格式符错误:你用了@"mmyyyy",这里的mm代表的是分钟,月份应该用大写的MM,正确格式是@"MMyyyy"。
  • 排序方向问题:你想要的是降序排列(最新的年月在前),但当前的比较器是升序逻辑(旧的在前),需要反转比较结果来实现降序。

接下来是修正后的完整代码:

// 1. 先处理原始字符串,拆分成独立的年月字符串数组
NSString *dateString = @"042018, 052018, 122018, 012019, 022019, 032019";
NSArray *originalArray = [dateString componentsSeparatedByString:@", "];

// 2. 初始化日期格式化器,使用正确的月份格式符
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = @"MMyyyy";
// 补充:设置固定locale避免不同地区的解析差异
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];

// 3. 定义降序比较器
NSComparator dateComparator = ^(NSString *str1, NSString *str2) {
    NSDate *date1 = [dateFormatter dateFromString:str1];
    NSDate *date2 = [dateFormatter dateFromString:str2];
    // 反转比较结果,实现降序排列
    return [date2 compare:date1];
};

// 4. 执行排序
NSArray *sortedArray = [originalArray sortedArrayUsingComparator:dateComparator];

NSLog(@"排序后的数组:%@", sortedArray);

运行这段代码后,输出结果就是你预期的:

(032019, 022019, 012019, 122018, 052018, 042018)

另外补充两个细节:

  • 设置en_US_POSIX locale是为了避免不同系统语言环境下的日期解析差异,确保无论设备语言是什么,都能稳定解析MMyyyy格式的字符串。
  • 如果你的原始数组本来就是包含多个独立年月字符串的(可能是你初始化时的笔误),那可以跳过第一步的拆分,直接用正确的数组执行后续排序逻辑。

内容的提问来源于stack exchange,提问作者Some Person

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 09:22:35