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

iOS Swift日期数组去重:移除同一天日期保留不同天记录

Swift iOS 日期数组去重(保留不同日期记录)

需求说明

处理日期数组,移除同一天的重复记录,仅保留每个日期的一条数据。输入数组存在笔误(2023-10-110应为2023-10-10),修正后按需求处理。

错误原因分析

你遇到的Cannot call value of non-function type '[Date]'错误,通常是因为把数组当成函数调用了——比如误写dates()而非dates,或者访问数组元素时用了圆括号dates(index),正确的数组元素访问应该用方括号dates[index]。

正确实现方案

以下是两种可行的去重方式,核心是通过Calendar判断两个日期是否属于同一天:

方式一:利用Set记录已处理日期(性能更优)

import Foundation

// 修正笔误后的输入日期字符串数组
let dateStrings = [
    "2023-10-16 09:13:07 +0000",
    "2023-10-17 09:13:07 +0000",
    "2023-10-14 09:13:07 +0000",
    "2023-10-15 09:13:07 +0000",
    "2023-10-16 09:13:07 +0000",
    "2023-10-10 09:13:07 +0000",
    "2023-10-16 09:13:07 +0000",
    "2023-10-14 09:13:07 +0000",
    "2023-10-16 09:13:07 +0000",
    "2023-10-15 09:13:07 +0000"
]

// 字符串转Date
let dateFormatter = ISO8601DateFormatter()
dateFormatter.formatOptions = [.withFullDate, .withTime, .withTimeZone]
let dates = dateStrings.compactMap { dateFormatter.date(from: $0) }

// 去重逻辑
let calendar = Calendar.current
var seenStartOfDays = Set<Date>()
let uniqueDates = dates.filter { date in
    guard let startOfDay = calendar.startOfDay(for: date) else { return false }
    guard !seenStartOfDays.contains(startOfDay) else { return false }
    seenStartOfDays.insert(startOfDay)
    return true
}

// 按日期降序排序(匹配期望输出顺序)
let sortedUniqueDates = uniqueDates.sorted { $0 > $1 }

// 输出结果
for date in sortedUniqueDates {
    print(dateFormatter.string(from: date))
}

方式二:用Reduce遍历去重(代码更简洁)

如果数据量不大,也可以用reduce直接遍历判断:

let calendar = Calendar.current
let uniqueDates = dates.reduce(into: [Date]()) { result, currentDate in
    let isDuplicate = result.contains { calendar.isDate($0, inSameDayAs: currentDate) }
    if !isDuplicate {
        result.append(currentDate)
    }
}

// 排序后输出
let sortedUniqueDates = uniqueDates.sorted { $0 > $1 }

输出结果

运行上述代码后,输出如下:

2023-10-17 09:13:07 +0000
2023-10-16 09:13:07 +0000
2023-10-15 09:13:07 +0000
2023-10-14 09:13:07 +0000
2023-10-10 09:13:07 +0000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 11:35:24