2016-07-03 43 views
11

我有一個包含稱爲HistoryObject的對象陣列,並且它具有諸如「日期」,「姓名」等排序對象按日期

我排序陣列像這樣的屬性:

let sortedArray = HistoryArray.sort({ $0.date.compare($1.date) == NSComparisonResult.OrderedDescending}) 

這是應該排序從新到舊的日期。例如:

  • 2016年6月30日
  • 2016年6月29日

等。

但是,當我的數組包含 「2016年7月2日的」 排序後的數組變爲:

  • 2016年6月30日
  • 2016年6月29日
  • 2016年7月2日

其中, 「2016年7月2日」 應該是頂部排序後,現在是底部?我該如何解決這個問題?

+0

您是否再次使用排序功能?這不能自動設置。每次添加新對象時,對其進行排序的唯一方法就是創建數組擴展,並且每次使用AddObject時都必須調用此排序函數。 –

+0

我的意思是我從api得到完整數組後,我將整個數組與對象排序,這意味着我不會在排序後添加對象。但它沒有正確分類。 @AltimirAntonov –

+0

首先將字符串轉換爲NSDate。我會在幾分鐘內寫出答案。 –

回答

23

使用夫特4 &夫特3

let testArray = ["25 Jun, 2016", "30 Jun, 2016", "28 Jun, 2016", "2 Jul, 2016"] 
var convertedArray: [Date] = [] 

var dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "dd MM, yyyy"// yyyy-MM-dd" 

for dat in testArray { 
    let date = dateFormatter.date(from: dat) 
    if let date = date { 
     convertedArray.append(date) 
    } 
} 

var ready = convertedArray.sorted(by: { $0.compare($1) == .orderedDescending }) 

print(ready) 

使用夫特2

例如,你有日期的陣列和另一個1個陣列,那裏保存轉換日期:

var testArray = ["25 Jun, 2016", "30 Jun, 2016", "28 Jun, 2016", "2 Jul, 2016"] 
var convertedArray: [NSDate] = [] 

之後,我們轉換日期:

var dateFormatter = NSDateFormatter() 
dateFormatter.dateFormat = "dd MM, yyyy"// yyyy-MM-dd" 

for dat in testArray { 
    var date = dateFormatter.dateFromString(dat) 
    convertedArray.append(date!) 
} 

而結果:

var ready = convertedArray.sort({ $0.compare($1) == .OrderedDescending }) 

print(ready) 
10

的SWIFT 3

var testArray = ["25 Jun, 2016", "30 Jun, 2016", "28 Jun, 2016", "2 Jul, 2016"] 
var convertedArray: [Date] = [] 

var dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "dd/MM/yyyy" 

for dat in testArray { 
    var date = dateFormatter.date(from: dat) 
    convertedArray.append(date!) 
} 

//Approach : 1 
convertedArray.sort(){$0 < $1}  

//Approach : 2 
convertedArray.sorted(by: {$0.timeIntervalSince1970 < $1.timeIntervalSince1970}) 

print(convertedArray) 
1

避免convertedArray

的額外的變量使用夫特4 & Swift 3

let testArray = ["25 Jun, 2016", "30 Jun, 2016", "28 Jun, 2016", "2 Jul, 2016"] 

var dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "dd MM, yyyy"// yyyy-MM-dd" 

var ready = convertedArray.sorted(by: { dateFormatter.date(from:$0).compare(dateFormatter.date(from:$1)) == .orderedDescending }) 

print(ready)