Arrays Swift:如何使用自定义谓词检查日期是否连续

Arrays Swift:如何使用自定义谓词检查日期是否连续,arrays,swift,date,calendar,Arrays,Swift,Date,Calendar,我试图编写一个函数,检查数组中的日期(so type Date)是否连续,同时排除一周中的某些日期(可以是任何日期,例如[1,4,6]或[]或[1,2,3,4,5])。有一个不包括周末的谓词,但我还没有设法修改此方法以获取.weekday数组 任何建议都将不胜感激。这里是一个基本的解决方案,它将日期转换为一个工作日数组([Int]),然后使用for循环验证该数组 let secondsPerDay = 24.0 * 60.0 * 60.0 var dates = [Date(timeInterv

我试图编写一个函数,检查数组中的日期(so type 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" )
让secondsPerDay=24.0*60.0*60.0
变量日期=[日期(时间间隔自现在起:-2.0*secondsPerDay),
日期(时间间隔从现在起:-1.0*秒/日),
日期(),
日期(时间间隔自现在起:2*secondsPerDay),
日期(时间间隔自现在起:3*secondsPerDay),]
让calendar=calendar.current
让排除=[5,6]
var weekdays=dates.map{calendar.component(.weekday,from:$0)}
var prev=工作日。首先//更改为守卫声明或类似声明
var isconsecuritive=true
对于1.中的索引。。周工作日prev-7:prev
如果previousWeekday+1==weekday | |排除。包含(previousWeekday+1){
prev=工作日
持续
}
isconsecuritive=false
打破
}
打印(“日期数组是\(是否连续?”:“不是”)连续的”)

你能告诉我们你尝试过什么吗?嘿@JoakimDanielson我没有写太多的代码,我只是想知道解决方案应该是什么样子。现在,我正在尝试获取今天的.weekday,这是这个函数的起点,然后使用它作为索引,在bool数组中进行迭代(表示一周中要过滤的天数)。所以对于[1,4,6],数组应该是(从星期天开始)[true,false,false,false,true,false,true]。用这种方法我很难弄清楚的是如何前后搜索下一个布尔值,这是真的。很抱歉,我不能分享更多的代码,这个问题有多模糊,但我发现自己很难理解它。这将用于计算连胜,我真正需要弄清楚如何找到的唯一部分是确定从今天开始的第二天向后的远期是什么。