Nat*_*Mio 41 arrays sorting swift
我有一个包含被调用对象的数组HistoryObject,它具有"日期","名称"等属性.
我像这样排序数组:
let sortedArray = HistoryArray.sort({ $0.date.compare($1.date) == NSComparisonResult.OrderedDescending})
Run Code Online (Sandbox Code Playgroud)
应该将日期从较新到最旧排序.例如:
等等..
但是当我的数组包含"2016年7月2日"时,排序的数组变为:
排序后"2016年7月2日"应该排在最前面,现在它位于底部?我该如何解决这个问题?
Alt*_*nov 81
使用Swift 4和Swift 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)
Run Code Online (Sandbox Code Playgroud)
使用Swift 2
例如,您有包含日期的数组和另外1个数组,您将在其中保存转换日期:
var testArray = ["25 Jun, 2016", "30 Jun, 2016", "28 Jun, 2016", "2 Jul, 2016"]
var convertedArray: [NSDate] = []
Run Code Online (Sandbox Code Playgroud)
之后我们转换日期:
var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "dd MM, yyyy"// yyyy-MM-dd"
for dat in testArray {
var date = dateFormatter.dateFromString(dat)
convertedArray.append(date!)
}
Run Code Online (Sandbox Code Playgroud)
结果如下:
var ready = convertedArray.sort({ $0.compare($1) == .OrderedDescending })
print(ready)
Run Code Online (Sandbox Code Playgroud)
Ram*_*rma 14
对于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)
Run Code Online (Sandbox Code Playgroud)
struct Test {
let dateStr: String
}
Run Code Online (Sandbox Code Playgroud)
let testObjects = ["25 Jun, 2016", "30 Jun, 2016", "28 Jun, 2016", "12 Jul, 2016"]
.map(Test.init(dateStr:))
Run Code Online (Sandbox Code Playgroud)
DateFormatter:var dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
dateFormatter.dateFormat = "dd MMM, yyyy"
Run Code Online (Sandbox Code Playgroud)
map每个项目到一个元组(测试,日期),然后按sort日期整个数组,然后map再次到测试对象:let convertedObjects = testObjects
.map { return ($0, dateFormatter.date(from: $0.dateStr)!) }
.sorted { $0.1 > $1.1 }
.map(\.0)
Run Code Online (Sandbox Code Playgroud)
以类似的方式,我们可以将日期数组排序为字符串:
let testArray = ["25 Jun, 2016", "30 Jun, 2016", "28 Jun, 2016", "12 Jul, 2016"]
Run Code Online (Sandbox Code Playgroud)
DateFormatter:var dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
dateFormatter.dateFormat = "dd MMM, yyyy"
Run Code Online (Sandbox Code Playgroud)
map每个项目到日期,然后是sort整个数组:let convertedArray = testArray
.compactMap(dateFormatter.date(from:))
.sorted(by: >)
Run Code Online (Sandbox Code Playgroud)
小智 6
避免使用convertedArray的额外变量
使用Swift 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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
45376 次 |
| 最近记录: |