arrays - Swift:如何使用自定义谓词检查日期是否连续
问题描述
我正在尝试编写一个函数来检查数组中的日期(因此键入 Date)是否是连续的,同时排除一周中的某些天(可以是任何天,例如 [1,4,6] 或 [] 或 [1, 2,3,4,5])。这个答案有一个不包括周末的谓词,但我没有设法修改这种方法以采用 .weekday 数组
任何建议将不胜感激。
解决方案
这是一个构建的基本解决方案,它将日期转换为工作日数组([Int]),然后使用 for 循环来验证数组。
let secondsPerDay = 24.0 * 60.0 * 60.0
var dates = [Date(timeIntervalSinceNow: -2.0 * secondsPerDay),
Date(timeIntervalSinceNow: -1.0 * secondsPerDay),
Date(),
Date(timeIntervalSinceNow: 2 * secondsPerDay),
Date(timeIntervalSinceNow: 3 * secondsPerDay),]
let calendar = Calendar.current
let excluded = [5, 6]
var weekdays = dates.map {calendar.component(.weekday, from: $0)}
var prev = weekdays.first! //Change to a guard statement or similar
var isConsecutive = true
for index in 1..<weekdays.count {
let weekday = weekdays[index]
let previousWeekday = prev > weekday ? prev - 7 : prev
if previousWeekday + 1 == weekday || excluded.contains(previousWeekday + 1) {
prev = weekday
continue
}
isConsecutive = false
break
}
print("Date array is \(isConsecutive ? "" : "not ")consecutive" )
推荐阅读
- python - 动态优化需要帮助:错误消息:通过的 f0 在优化算法中具有多于 1 个维度
- java - Spring Security 加密密码问题
- c# - 如何将此 SQL 转换为 LINQ?
- python - 转置和重塑究竟是如何工作的?
- opencv - 使用 ML 中的特征提取方法将灰度图像转换为彩色图像
- react-native - 在 Mac OS Catalina 上安装 Watchman 无法使用 Home brew
- wpf - 为什么我点击按钮后左眼不再眨眼
- c# - C# WPF TextBox 对文本更改的调用方法
- python - 使用pandas groupby并申请累积积分
- r - Tidyquant 中权重随时间和资产变化的投资组合