如何根据数组 swift 对多个数组进行排序?

How to sort multiple array based on an array swift?

我想根据 NSDate 的数组对多个数组进行排序

var date = [NSDate]()
var name = [String]()
var job = [String]()

我想根据日期对姓名和工作进行排序。例如

date = [2016-04-02 01:03:42 +00002,2016-03-02 01:03:42 +0000,2016-05-02 01:03:42 +0000] 

name = [john,alex,danson]

job = [engineer,programmer,swimmer]

我想将日期从最早到最新排序,然后我想根据日期对姓名和工作进行排序。结果会像

date = [2016-03-02 01:03:42 +0000 ,2016-04-02 01:03:42 +0000 , 2016-05-02 01:03:42 +0000 ] //Being Sorted
name = [alex,john,danson]
job = [programmer,engineer,swimmer]

我该怎么做?

extension NSDate {
    var day: Int { return NSCalendar.currentCalendar().components(.Day, fromDate: self).day }
}

let result = zip(zip(date, name), jobs).map { ([=10=].0.0, [=10=].0.1, [=10=].1) }.sort { [=10=].0.day < .0.day }
print(result)

这应该可以做到。如果您需要解释,我会尽力解释。

如果您希望对现有数组进行排序:

name = name.enumerate().sort { date[[=11=].index].day < date[.index].day }.map { [=11=].element }
jobs = jobs.enumerate().sort { date[[=11=].index].day < date[.index].day }.map { [=11=].element }

然而,这样做并不安全,因为如果 namejobs 的大小大于 date,它将崩溃。在使用它之前,你必须在内部建立一些安全措施。

我忘了说的是,您还可以通过从 result:

中提取数组来对 "original" 数组进行排序
name = result.map { [=12=].1 }
jobs = result.map { [=12=].2 }

这是一个编程问题,而不是 Swift 问题。

let formatter = NSDateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss Z"
let dateStrings = ["2016-03-02 01:04:42 +0000","2016-04-02 01:03:42 +0000" , "2016-05-02 01:03:42 +0000" ]
let date = dateStrings.map {
    dateString in formatter.dateFromString(dateString)}
let name = ["alex","john","danson"]
let job = ["programmer","engineer","swimmer"]

let combine = date.enumerate().map {
    index, date in
    return (date!,name[index],job[index])
    }

let result = combine.sort{
    [=10=].0.compare(.0) == NSComparisonResult.OrderedDescending
}