对日期数组进行排序,但如果过去的日期下降到数组的底部 Swift
Sort Array of Dates, but if past date drop to bottom of Array Swift
我需要为即将发生的事件按时间和日期对 table 进行排序。
我需要在顶部按以下事件降序排列的最近的未来日期字符串。但是我想将过去的事件放到 array/table 的底部,我将在其中隐藏日期和时间,以便显示历史记录。
它是一个结构数组,如果有区别的话
例如:
事件 3 - 14:15
事件 4 - 15:00
事件 5 - 18:03
事件 1 -
事件 2 -
以下是对我的数组进行排序的方法,我只想将过去的日期放到底部
newArray = oldArray.sorted(by: {Date(timeIntervalSinceNow: [=11=].eventTime < Date(timeIntervalSinceNow: .eventTime})
作为临时修复,我已经这样做了,我确信有更优雅的方法,但在更好的解决方案出现之前,它可能会对其他人有所帮助
let allStartToFin = myArrat.sorted(by: {Date(timeIntervalSinceNow:([=10=].startTime)!).timeIntervalSinceNow < Date(timeIntervalSinceNow:(.startTime)!).timeIntervalSinceNow})
var correctOrder = [Object]()
var past = [Object]()
for item in 0...(allStartToFin.count - 1) {
if (Date(timeIntervalSince1970: TimeInterval((allStartToFin[item].startTime)!))) > Date() {
correctOrder.append(allStartToFin[item])
} else {
past.append(allStartToFin[item])
}
if item == (allStartToFin.count - 1) {
correctOrder = correctOrder + past
self.finalArray = correctOrder
self.tableView.reloadData()
}
}
解决方案 A:排序、拆分和合并
let now = Date()
let sortedArray = myArray.sorted(by: { [=10=].startTime < .startTime })
var finalArray = sortedArray
if let index = sortedArray.index(where: { [=10=].startTime > now }) {
if index > 0 {
finalArray = Array(sortedArray[index ..< sortedArray.endIndex] + sortedArray[sortedArray.startIndex ... index - 1])
}
}
解决方案 B(更快):按谓词排序
let now = Date()
let newArray = myArray.sorted(by: {
if [=11=].startTime > now {
if .startTime > now {
return [=11=].startTime < .startTime
} else {
return true
}
} else {
if .startTime > now {
return false
} else {
return [=11=].startTime < .startTime
}
}
})
我需要为即将发生的事件按时间和日期对 table 进行排序。 我需要在顶部按以下事件降序排列的最近的未来日期字符串。但是我想将过去的事件放到 array/table 的底部,我将在其中隐藏日期和时间,以便显示历史记录。
它是一个结构数组,如果有区别的话
例如:
事件 3 - 14:15
事件 4 - 15:00
事件 5 - 18:03
事件 1 -
事件 2 -
以下是对我的数组进行排序的方法,我只想将过去的日期放到底部
newArray = oldArray.sorted(by: {Date(timeIntervalSinceNow: [=11=].eventTime < Date(timeIntervalSinceNow: .eventTime})
作为临时修复,我已经这样做了,我确信有更优雅的方法,但在更好的解决方案出现之前,它可能会对其他人有所帮助
let allStartToFin = myArrat.sorted(by: {Date(timeIntervalSinceNow:([=10=].startTime)!).timeIntervalSinceNow < Date(timeIntervalSinceNow:(.startTime)!).timeIntervalSinceNow})
var correctOrder = [Object]()
var past = [Object]()
for item in 0...(allStartToFin.count - 1) {
if (Date(timeIntervalSince1970: TimeInterval((allStartToFin[item].startTime)!))) > Date() {
correctOrder.append(allStartToFin[item])
} else {
past.append(allStartToFin[item])
}
if item == (allStartToFin.count - 1) {
correctOrder = correctOrder + past
self.finalArray = correctOrder
self.tableView.reloadData()
}
}
解决方案 A:排序、拆分和合并
let now = Date()
let sortedArray = myArray.sorted(by: { [=10=].startTime < .startTime })
var finalArray = sortedArray
if let index = sortedArray.index(where: { [=10=].startTime > now }) {
if index > 0 {
finalArray = Array(sortedArray[index ..< sortedArray.endIndex] + sortedArray[sortedArray.startIndex ... index - 1])
}
}
解决方案 B(更快):按谓词排序
let now = Date()
let newArray = myArray.sorted(by: {
if [=11=].startTime > now {
if .startTime > now {
return [=11=].startTime < .startTime
} else {
return true
}
} else {
if .startTime > now {
return false
} else {
return [=11=].startTime < .startTime
}
}
})