2016-07-03 42 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)