Swift中JSON解码后按最新日期筛选数组内字典的实现问题
可行实现方案
核心逻辑分两步执行:先过滤出所有符合指定eventType的条目,再从过滤结果中筛选出endDateTime最新的条目即可,代码实现如下:
func parseArray(data: [EventCalendar]) { // 第一步:筛选所有eventType为指定值的条目,示例指定为201,可按需修改 let targetType = 201 let matchedEvents = data.filter { $0.eventType == targetType } // 第二步:从匹配条目中取endDateTime最大(时间最新)的条目 let latestMatchedEvent = matchedEvents.max { $0.endDateTime < $1.endDateTime } print(latestMatchedEvent) }
补充说明
- 你之前
max(by:)调用失败是因为没有正确传入比较逻辑:max(by:)的闭包需要返回布尔值,表示第一个入参是否比第二个入参“更小”,这里直接比较两个条目endDateTime的大小即可,Date类型原生支持<、>等比较运算符,不需要额外处理。 - 如果你的数据量很小,也可以合并成单步操作,性能差异可以忽略:
let latestMatchedEvent = data.max { $0.eventType == 201 && $1.eventType != 201 ? false : $0.endDateTime < $1.endDateTime }
- 如果不存在符合
eventType的条目,最终结果会返回nil,和你之前用first(where:)的行为一致,可根据需求自行添加判空处理。 - 如果你后续把
endDateTime改成String类型也能正常比较,只要你的日期格式固定为YYYY-MM-DD这种从高位到低位排列的标准格式,字符串的字典序和日期的先后顺序完全一致,直接替换成$0.endDateTime < $1.endDateTime也能得到正确结果。
内容的提问来源于stack exchange,提问作者Mr_Bull3t
相关产品推荐
相关产品推荐

