按日期对多个字符串进行排序
Sort multiple strings by dates
[编辑]
在我的 fetchData 函数末尾添加这个就可以了:
//Sort the tableView by date and time if it's the same date
self.tasks.sort { if [=10=].date != .date {
return [=10=].date < .date
}
else {
return [=10=].hour < .hour
}
}
我刚开始编程,但我被卡住了,基本上我有一个显示多个任务的表格视图,我想按日期对任务进行排序,所以我提取了任务的 time/hour(已经在firebase) 然后将它们转换为 Date 以对它们进行排序,但我不知道如何将它们“转换”回字符串以将它们放回我的 cell.date.text...这就是我到目前为止尝试的原因:
var convertedArray: [Date] = []
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellID, for: indexPath) as! MyTasksTableCell
//Gathering the date and hour (string)
let date = "\(Tasks[indexPath.row].date)"
let hour = "\(Tasks[indexPath.row].hour)"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MM/dd/yyyy 'at' HH:mm"
let DateHour = date + " at " + hour
//OUTPUT:
// 10/22/2021 at 15:10
// 10/21/2021 at 22:24
// 10/21/2021 at 01:55
// 12/16/2021 at 14:50
// Converting them to a Date
let finalDate = dateFormatter.date(from: DateHour)
//OUTPUT:
// Optional(2021-12-16 13:50:00 +0000)
// Optional(2021-10-22 13:10:00 +0000)
// Optional(2021-10-21 20:24:00 +0000)
// Optional(2021-10-20 23:55:00 +0000)
//Sorting them
convertedArray.append(finalDate!)
let dateObject = convertedArray.sorted(by: { [=11=].compare() == .orderedAscending })
//OUTPUT:
// [2021-10-22 13:10:00 +0000]
// [2021-10-22 13:10:00 +0000, 2021-12-16 13:50:00 +0000]
// [2021-10-21 20:24:00 +0000, 2021-10-22 13:10:00 +0000, 2021-12-16 13:50:00 +0000]
// [2021-10-20 23:55:00 +0000, 2021-10-21 20:24:00 +0000, 2021-10-22 13:10:00 +0000, 2021-12-16 13:50:00 +0000]
for date in dateObject {
let date = dateFormatter.string(from: date)
//OUTPUT:
// 12/16/2021 at 14:50
// 10/22/2021 at 15:10
// 12/16/2021 at 14:50
// 10/21/2021 at 01:55
// 10/22/2021 at 15:10
// 12/16/2021 at 14:50
// 10/21/2021 at 01:55
// 10/21/2021 at 22:24
// 10/22/2021 at 15:10
// 12/16/2021 at 14:50
}
var newList = [String]()
for date in dateObject {
let dateformatter = DateFormatter()
dateformatter.dateFormat = "MM/dd/yyyy 'at' HH:mm"
let convertDate = dateformatter.string(from: date)
newList.append(convertDate)
}
print(newList)
//OUTPUT:
// ["12/16/2021 at 14:50"]
// ["10/22/2021 at 15:10", "12/16/2021 at 14:50"]
// ["10/21/2021 at 22:24", "10/22/2021 at 15:10", "12/16/2021 at 14:50"]
// ["10/21/2021 at 01:55", "10/21/2021 at 22:24", "10/22/2021 at 15:10", "12/16/2021 at 14:50"]
您必须订购数据源(这里是您的任务数组)。然后它们将在 TableView 中以正确的顺序显示。
或者您也可以创建一个计算变量 orderedTasks 并将其用作您的数据源。
注意:Swift 中的变量名称应以小写字母开头,因此请使用任务而不是任务(这适合 class 或结构命名)。
[编辑] 在我的 fetchData 函数末尾添加这个就可以了:
//Sort the tableView by date and time if it's the same date
self.tasks.sort { if [=10=].date != .date {
return [=10=].date < .date
}
else {
return [=10=].hour < .hour
}
}
我刚开始编程,但我被卡住了,基本上我有一个显示多个任务的表格视图,我想按日期对任务进行排序,所以我提取了任务的 time/hour(已经在firebase) 然后将它们转换为 Date 以对它们进行排序,但我不知道如何将它们“转换”回字符串以将它们放回我的 cell.date.text...这就是我到目前为止尝试的原因:
var convertedArray: [Date] = []
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellID, for: indexPath) as! MyTasksTableCell
//Gathering the date and hour (string)
let date = "\(Tasks[indexPath.row].date)"
let hour = "\(Tasks[indexPath.row].hour)"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MM/dd/yyyy 'at' HH:mm"
let DateHour = date + " at " + hour
//OUTPUT:
// 10/22/2021 at 15:10
// 10/21/2021 at 22:24
// 10/21/2021 at 01:55
// 12/16/2021 at 14:50
// Converting them to a Date
let finalDate = dateFormatter.date(from: DateHour)
//OUTPUT:
// Optional(2021-12-16 13:50:00 +0000)
// Optional(2021-10-22 13:10:00 +0000)
// Optional(2021-10-21 20:24:00 +0000)
// Optional(2021-10-20 23:55:00 +0000)
//Sorting them
convertedArray.append(finalDate!)
let dateObject = convertedArray.sorted(by: { [=11=].compare() == .orderedAscending })
//OUTPUT:
// [2021-10-22 13:10:00 +0000]
// [2021-10-22 13:10:00 +0000, 2021-12-16 13:50:00 +0000]
// [2021-10-21 20:24:00 +0000, 2021-10-22 13:10:00 +0000, 2021-12-16 13:50:00 +0000]
// [2021-10-20 23:55:00 +0000, 2021-10-21 20:24:00 +0000, 2021-10-22 13:10:00 +0000, 2021-12-16 13:50:00 +0000]
for date in dateObject {
let date = dateFormatter.string(from: date)
//OUTPUT:
// 12/16/2021 at 14:50
// 10/22/2021 at 15:10
// 12/16/2021 at 14:50
// 10/21/2021 at 01:55
// 10/22/2021 at 15:10
// 12/16/2021 at 14:50
// 10/21/2021 at 01:55
// 10/21/2021 at 22:24
// 10/22/2021 at 15:10
// 12/16/2021 at 14:50
}
var newList = [String]()
for date in dateObject {
let dateformatter = DateFormatter()
dateformatter.dateFormat = "MM/dd/yyyy 'at' HH:mm"
let convertDate = dateformatter.string(from: date)
newList.append(convertDate)
}
print(newList)
//OUTPUT:
// ["12/16/2021 at 14:50"]
// ["10/22/2021 at 15:10", "12/16/2021 at 14:50"]
// ["10/21/2021 at 22:24", "10/22/2021 at 15:10", "12/16/2021 at 14:50"]
// ["10/21/2021 at 01:55", "10/21/2021 at 22:24", "10/22/2021 at 15:10", "12/16/2021 at 14:50"]
您必须订购数据源(这里是您的任务数组)。然后它们将在 TableView 中以正确的顺序显示。
或者您也可以创建一个计算变量 orderedTasks 并将其用作您的数据源。
注意:Swift 中的变量名称应以小写字母开头,因此请使用任务而不是任务(这适合 class 或结构命名)。