You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)
}

补充说明

  1. 你之前max(by:)调用失败是因为没有正确传入比较逻辑:max(by:)的闭包需要返回布尔值,表示第一个入参是否比第二个入参“更小”,这里直接比较两个条目endDateTime的大小即可,Date类型原生支持<、>等比较运算符,不需要额外处理。
  2. 如果你的数据量很小,也可以合并成单步操作,性能差异可以忽略:
let latestMatchedEvent = data.max { 
    $0.eventType == 201 && $1.eventType != 201 ? false : 
    $0.endDateTime < $1.endDateTime 
}
  1. 如果不存在符合eventType的条目,最终结果会返回nil,和你之前用first(where:)的行为一致,可根据需求自行添加判空处理。
  2. 如果你后续把endDateTime改成String类型也能正常比较,只要你的日期格式固定为YYYY-MM-DD这种从高位到低位排列的标准格式,字符串的字典序和日期的先后顺序完全一致,直接替换成$0.endDateTime < $1.endDateTime也能得到正确结果。

内容的提问来源于stack exchange,提问作者Mr_Bull3t

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 09:09:03