2016-03-02 121 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

你們是正確的,但我怎麼能從中得到有序的名稱,日期和工作? –

相關問題