Swift: 如何使用自定义谓词检查日期是否连续
Swift: How to check whether dates are consecutive with custom predicate
我正在尝试编写一个函数来检查数组中的日期(因此键入 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: [=10=])}
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" )
我正在尝试编写一个函数来检查数组中的日期(因此键入 Date)是否连续,同时排除一周中的某些天(可以是任何一天,例如 [1,4,6] 或 [ ] 或 [1,2,3,4,5])。
如有任何建议,我们将不胜感激。
这是一个基本的解决方案,它将日期转换为工作日数组 ([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: [=10=])}
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" )