首页 > 解决方案 > 如何快速过滤日期数组

问题描述

如何在日期数组下方过滤。我需要从该数组中获取每五分钟的数据。意味着如果我的第一个索引数据是“2021-01-06 10:52:15 +0000”,那么我需要五分钟后从数组中获取第二个数据是“2021-01-06 10:57:15 +0000”。这样我需要每五分钟从下面的数组中获取日期数据。

[2021-01-06 10:52:15 +0000, 2021-01-06 10:52:30 +0000, 2021-01-06 10:52:45 +0000, 2021-01-06 10:53:00 +0000, 2021-01-06 10:53:15 +0000, 2021-01-06 10:53:30 +0000, 2021-01-06 10:53:45 +0000, 2021-01-06 10:54:00 +0000, 2021-01-06 10:54:15 +0000, 2021-01-06 10:54:30 +0000, 2021-01-06 10:54:45 +0000, 2021-01-06 10:55:00 +0000, 2021-01-06 10:55:15 +0000, 2021-01-06 10:55:30 +0000, 2021-01-06 10:55:45 +0000, 2021-01-06 10:56:00 +0000, 2021-01-06 10:56:15 +0000, 2021-01-06 10:56:30 +0000, 2021-01-06 10:56:45 +0000, 2021-01-06 10:57:00 +0000, 2021-01-06 10:57:15 +0000, 2021-01-06 10:57:30 +0000, 2021-01-06 10:57:45 +0000, 2021-01-06 10:58:00 +0000, 2021-01-06 10:58:15 +0000, 2021-01-06 10:58:30 +0000, 2021-01-06 10:58:45 +0000, 2021-01-06 10:59:00 +0000, 2021-01-06 10:59:15 +0000, 2021-01-06 10:59:30 +0000, 2021-01-06 10:59:45 +0000, 2021-01-06 11:00:00 +0000, 2021-01-06 11:00:15 +0000, 2021-01-06 11:00:30 +0000, 2021-01-06 11:00:45 +0000, 2021-01-06 11:01:00 +0000, 2021-01-06 11:01:15 +0000, 2021-01-06 11:01:30 +0000, 2021-01-06 11:01:45 +0000, 2021-01-06 11:02:00 +0000, 2021-01-06 11:02:15 +0000, 2021-01-06 11:02:30 +0000, 2021-01-06 11:02:45 +0000, 2021-01-06 11:05:00 +0000]

这只是数组的一部分。在我的情况下,数组每 15 秒增加一次,因此从服务器获取的日期数据量非常高。

在上面的数组中,如果过滤器记录不可用,则需要从数组中添加下一条记录。例如,如果数组中没有“2021-01-06 10:57:15 +0000”日期和时间,则需要添加“2021 -01-06 10:57:30 +0000" 或 2021-01-06 11:02:15 +0000。

标签: iosarraysswiftdatefilter

解决方案


首先,您需要创建一个变量来存储以分钟为单位的差异。获取第一个日期作为参考并使用它创建一个集合。然后过滤其余日期,检查参考日期和当前日期之间的分钟部分是否等于差值。如果为真,则增加差值并返回真,否则只返回假。将过滤器的结果添加到单个日期的集合中:

试试这样:

var diff = 5
if let reference = dates.first {
    let filtered = [reference] + dates.dropFirst().filter({
        if Calendar.current.dateComponents([.minute], from: reference, to: $0).minute! == diff {
            diff += 5
            return true
        }
        return false
    })
    print(filtered)  // [2021-01-06 10:52:15 +0000, 2021-01-06 10:57:15 +0000, 2021-01-06 11:02:15 +0000]
}

推荐阅读