根据月份和年份字符串对数组进行排序

时间:2020-08-10 11:58:22

标签: arrays swift sorting filter array-filter

排序包含以下格式的月份和年份的数组的最佳方法是什么:

let dateX2 = Date(); let formatter2 = DateFormatter()
formatter2.dateFormat = "MMMM,,yyyy"
let dateZ = formatter2.string(from: dateX2)

包含上述格式化日期的数组顺序不正确:

let array = ["July,,2019", "January,,2020", "February,,2019", "March,,2020"]

排序后的预期结果:

let result = ["February,,2019", "July,,2019", "January,,2020", "March,,2020"]

2 个答案:

答案 0 :(得分:0)

使用Date对象数组作为数据源,然后将日期排序并格式化为预期的输出结果

let formatter = DateFormatter()
formatter.dateFormat = "MMMM,,yyyy"

let sortedArry = array.sorted(by: {$0 < $1}).map {formatter.string(from: $0)}

示例输入

let oneMonth = 3600 * 24 * 30.5 //I know :) but its just to generate som test data
let array = [
    Date(timeIntervalSinceNow: -9 * oneMonth),
    Date(timeIntervalSinceNow: -3 * oneMonth),
    Date(timeIntervalSinceNow: -4 * oneMonth),
    Date(timeIntervalSinceNow: -10 * oneMonth),
]

给予

[“ 2019年10月”,“ 2019年11月”,“ 2020年4月”,“ 2020年5月”]

答案 1 :(得分:0)

要对日期字符串进行排序,您需要将其转换为Date对象。既然您的示例代码从日期对象开始,那么最好将它们保留为日期对象。

其他一些响应者建议使用排序闭包主体中对DateFormatter.date(from:)的调用进行排序。请注意,这样做确实很慢。 (这比直接对日期对象排序要慢1000倍。)如果要对多个日期进行排序,最好将日期字符串与原始日期字符串和Date对象组合成元组,对元组进行排序,然后提取来自元组排序数组的日期字符串。

this thread中查看我的答案,其中展示了几种不同的方式对包含日期字符串的结构进行排序。