2016-03-02 123 views
-1

我想排序基于阵列上的多个阵列是的NSDate如何基于数组swift对多个数组进行排序?

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] 

我该怎么做?

+0

这是学校的作业吗? – Fonix

+0

实际上是我的项目 –

+1

将它们组合成一个元组数组或将其封装为结构更有意义。 –

回答

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

let result = zip(zip(date, name), jobs).map { ($0.0.0, $0.0.1, $0.1) }.sort { $0.0.day < $1.0.day } 
print(result) 

这应该这样做。如果你需要解释,我会试着解释。

如果你希望你的现有阵列的进行排序:

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

但是,这样做是不是安全的,因为如果namejobs大小比date更大,它会崩溃。在使用之前,你必须建立一些安全的内部。

什么我忘了提及的是,你还可以得到由result提取它整理的“原始”数组:

name = result.map { $0.1 } 
jobs = result.map { $0.2 } 
+0

我有点理解,但日期,工作和名称真的被排序或只是结果? –

+0

只有结果将被排序。我编辑了答案,以便您可以对现有数组进行排序。 – Eendje

+0

我得到这个错误二进制运算符'<'不能应用到两个'NSDate'操作数 –

0

这是一个规划问题,而不是斯威夫特问题。

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{ 
    $0.0.compare($1.0) == NSComparisonResult.OrderedDescending 
} 
+0

你们是正确的,但我怎么能从中得到有序的名称,日期和工作? –

相关问题