簡體   English   中英

如何基於數組快速對多個數組排序?

[英]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 { ($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 }

這是一個編程問題,而不是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{
    $0.0.compare($1.0) == NSComparisonResult.OrderedDescending
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM