【问题标题】:How to filter date array in swift [closed]如何快速过滤日期数组[关闭]
【发布时间】:2021-04-11 22:01:53
【问题描述】:

如何过滤低于日期数组。我需要每五分钟从这个数组中获取一次数据。意味着如果我的第一个索引数据是“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。

【问题讨论】:

  • 这个问题看起来范围很窄,而且很清楚。它似乎是可以回答的,所以我投票重新开放。

标签: ios arrays swift date filter


【解决方案1】:

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

试试这样:

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

【讨论】:

  • 感谢 Leo 的回答。如果此数据“2021-01-06 10:57:15 +0000”不在数据数组中,是否有可能获得下一条记录。因为那些过滤器序列会破坏剩余的数据也没有过滤。
  • @skyline 您需要在帖子(您的代码)中提供更多详细信息。逻辑几乎相同,但不是返回 true 或 false,而是将日期附加到过滤结果中。
  • 当然@LeoDabus。我已经编辑了我的问题。有时数组中没有几个小时的数据,所以那时下一个数据没有过滤,过滤器从最后一个数据停止。那时如果数组中缺少特定数据,下一个数据应该添加或过滤正在进行,下一个值将添加。
【解决方案2】:

最简单的方法是遍历数组。

将初始日期存储在一个新数组中。

然后遍历数组,比较当前迭代的日期元素与新数组中最后一个存储的时间差。

如果至少 5 分钟,则将其存储在新数组中并继续。

【讨论】:

  • 感谢@volker 的反馈。这只是数组的一部分。在我的情况下,数组每 15 秒增加一次,因此日期数据量非常高。是否有任何过滤器可以应用于获取数据。
  • 因此,如果 5 分钟结束,则每 15 秒检查一次检索数据的时间,然后仅存储该值
猜你喜欢
  • 2017-12-30
  • 2015-10-27
  • 2014-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多