如何根据数组 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 }
然而,这样做并不安全,因为如果 name
或 jobs
的大小大于 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
}
我想根据 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 }
然而,这样做并不安全,因为如果 name
或 jobs
的大小大于 date
,它将崩溃。在使用它之前,你必须在内部建立一些安全措施。
我忘了说的是,您还可以通过从 result
:
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
}