Arrays 如何对表示月份和年份的字符串数组进行排序?

Arrays 如何对表示月份和年份的字符串数组进行排序?,arrays,string,sorting,swift3,Arrays,String,Sorting,Swift3,我的代码中有一个字符串数组,表示一系列的月份。大概是这样的: let arrayOfMonths = ["May 2017", "January 2018", "August 2016", "January 2015", "June 2017"] let sortedArrayOfMonths = ["January 2015", "August 2016", "May 2017", "June 2017", "January 2018"] 我想按照经典的月和年的顺序对它进行排序,所以我想要

我的代码中有一个字符串数组,表示一系列的月份。大概是这样的:

let arrayOfMonths = ["May 2017", "January 2018", "August 2016", "January 2015", "June 2017"]
let sortedArrayOfMonths = ["January 2015", "August 2016", "May 2017", "June 2017", "January 2018"]
我想按照经典的月和年的顺序对它进行排序,所以我想要这样的输出:

let arrayOfMonths = ["May 2017", "January 2018", "August 2016", "January 2015", "June 2017"]
let sortedArrayOfMonths = ["January 2015", "August 2016", "May 2017", "June 2017", "January 2018"]

我怎样才能在Swift 3中做到这一点?谢谢。

我搜索了更多,在Swift 3中找到了方法“.sorted()”,因此我构建了我的工作解决方案。如果有人需要,我会发布:

let monthForNumber = ["January":1, "February":2, "March":3, "April":4, "May":5, "June":6, "July":7, "August":8, "September":9, "October":10, "November":11, "December":12]
对于semplicity,我创建了结构“Month”,带有“name”属性和“year”属性,我将使用对象Month:

let month_1 = Month.init(name: "May", year: 2016)
let month_2 = Month.init(name: "April", year: 2010)
let month_3 = Month.init(name: "April", year: 2009)
let month_4 = Month.init(name: "January", year: 2026)
let month_5 = Month.init(name: "June", year: 2016)

let unsortedMonthsArray = [Month]()
unsortedMonthsArray.append(month_1)
unsortedMonthsArray.append(month_2)
unsortedMonthsArray.append(month_3)
unsortedMonthsArray.append(month_4)
unsortedMonthsArray.append(month_5)

let sortedArrayOfMonths = self.unsortedMonthsArray?.sorted(by: { (month1, month2) -> Bool in
        if self.monthForNumber[month1.name!] != self.monthForNumber[month2.name!] {
            if month1.year != month2.year {
                return month1.year < month2.year
            } else {
                return self.monthForNumber[month1.name!]! < self.monthForNumber[month2.name!]!
            }
        } else {
            if month1.year != month2.year {
                return month1.year < month2.year
            } else {
                return self.monthForNumber[month1.name!]! < self.monthForNumber[month2.name!]!
            }
        }
    })
let month_1=month.init(名称:“May”,年份:2016)
让month_2=month.init(名称:“四月”,年份:2010)
让month_3=month.init(名称:“四月”,年份:2009)
让month_4=month.init(名称:“一月”,年份:2026)
设月_5=month.init(名称:“June”,年份:2016)
让unsortedMonthsArray=[Month]()
unsortedMonthsArray.append(第1个月)
unsortedMonthsArray.append(第2个月)
unsortedMonthsArray.append(第3个月)
unsortedMonthsArray.append(第4个月)
未排序的月份数组。追加(第5个月)
让SortedDarrayOfMonths=self.unsortedMonthsArray?.sorted(按:{(month1,month2)->布尔输入
如果self.monthForNumber[month1.name!!=self.monthForNumber[month2.name!]{
如果月份1.year!=月份2.year{
返回月份1.year<月份2.year
}否则{
返回self.monthForNumber[month1.name!!
此解决方案将提供一个月的排序数组,可以轻松地将其转换为字符串数组(“monthName\u monthYear”)。

为什么不简单

let formatter : DateFormatter = {
    let df = DateFormatter()
    df.locale = Locale(identifier: "en_US_POSIX")
    df.dateFormat = "MMMM yyyy"
    return df
}()

let arrayOfMonths = ["May 2017", "January 2018", "August 2016", "January 2015", "June 2017"]

let sortedArrayOfMonths = arrayOfMonths.sorted( by: { formatter.date(from: $0)! < formatter.date(from: $1)! })
let格式化程序:日期格式化程序={
设df=DateFormatter()
df.locale=locale(标识符:“en_US_POSIX”)
df.dateFormat=“MMMM-yyyy”
返回df
}()
让arrayOfMonths=[“2017年5月”、“2018年1月”、“2016年8月”、“2015年1月”、“2017年6月”]
让sortedArrayOfMonths=arrayOfMonths.sorted(按:{formatter.date(from:$0)!
您也可以这样做:

let sortedMonths  = arrayOfMonths.map{($0,$0.components(separatedBy:" "))}
                    .map{($0,$1[1]+"\(Calendar.current.monthSymbols.index(of: $1[0])!+10)")}
                    .sorted{$0.1<$1.1}
                    .map{$0.0}
let sortedMonths=arrayOfMonths.map{($0,$0.components(分隔符:)}
.map{($0,$1[1]+“\(Calendar.current.monthSymbols.index(of:$1[0])!+10)”)

.sorted{$0.1将字符串转换为
Date
并对其进行排序。我不想要完整的日期对象,我只想对字符串进行排序。我不知道。dateFormat(MMMM yyyy),很好的解决方案,谢谢!