在Swift中实现按天展示数据,并且每个日期下的数据按时间降序排序,你可以使用字典来存储按日期分组的数据,并对每个日期下的数据进行排序。下面是一个Swift实现的示例:
示例代码:
import Foundation
// 假设KJHistoryModel包含时间戳和描述
class KJHistoryModel {
var timestamp: Date
var description: String
init(timestamp: Date, description: String) {
self.timestamp = timestamp
self.description = description
}
}
// 示例数据
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy/MM/dd HH:mm"
let data = [
KJHistoryModel(timestamp: dateFormatter.date(from: "2025/01/21 14:00")!, description: "Event 1"),
KJHistoryModel(timestamp: dateFormatter.date(from: "2025/01/21 16:00")!, description: "Event 2"),
KJHistoryModel(timestamp: dateFormatter.date(from: "2025/01/20 09:00")!, description: "Event 3"),
KJHistoryModel(timestamp: dateFormatter.date(from: "2025/01/20 12:00")!, description: "Event 4"),
KJHistoryModel(timestamp: dateFormatter.date(from: "2025/01/22 10:00")!, description: "Event 5")
]
// 按日期分组
var groupedData: [String: [KJHistoryModel]] = [:]
for item in data {
let dateKey = dateFormatter.string(from: item.timestamp).prefix(10) // 提取日期部分
if groupedData[String(dateKey)] == nil {
groupedData[String(dateKey)] = []
}
groupedData[String(dateKey)]?.append(item)
}
// 对每个日期组按时间降序排序
for (dateKey, items) in groupedData {
groupedData[dateKey] = items.sorted(by: { $0.timestamp > $1.timestamp })
//也可以
// groupedData[dateKey] = items.sorted{ $0.timestamp > $1.timestamp }
}
// 按日期顺序展示
let sortedDates = groupedData.keys.sorted()
for date in sortedDates {
print("Date: \(date)")
for event in groupedData[date]! {
print(" \(event.timestamp) - \(event.description)")
}
}
代码解析:
-
KJHistoryModel:定义了一个模型,包含一个时间戳(
timestamp
)和一个描述(description
)。 -
数据初始化:创建了一些示例数据,并使用
DateFormatter
来解析日期字符串。 -
按日期分组:使用一个字典
groupedData
,将数据按照日期(仅取年月日部分)分组。 -
排序:对于每个日期的事件列表,使用
sorted(by:)
按时间降序排序。 - 展示:按日期排序后,依次展示每个日期的数据,并按时间从最新到最旧排序。
输出示例:
Date: 2025/01/20
2025/01/20 12:00:00 - Event 4
2025/01/20 09:00:00 - Event 3
Date: 2025/01/21
2025/01/21 16:00:00 - Event 2
2025/01/21 14:00:00 - Event 1
Date: 2025/01/22
2025/01/22 10:00:00 - Event 5
解释:
- 我们首先通过提取日期的年月日部分,按日期分组数据。
- 对每个日期组内的数据,根据时间戳进行降序排序。
- 最后,按照日期从最早到最晚的顺序展示数据,每个日期内的事件按照时间从最新到最旧排序。