包含24小时前24小时的24序列的阵列

时间:2017-10-06 10:33:44

标签: ios arrays swift

我找到了一种通过

查找用户当前24小时时间的方法
let date = Date()
let calendar = Calendar.current
let hour = calendar.component(.hour, from: date) --> e.g.(15)

我想在此之前24小时创建一个序列数组。这方面的一个例子是

15
14
...
2
1
24
23 
... and so on

我已经能够了 将列表创建为1但是没有设置为0,我无法创建一个将转到24的公式。

我目前有 -

for i in 0...24 {
            var previousHours = 0

            if i >= hour{
              previousHours = hour - 24 + i

            } else {
                 previousHours = hour - i

            }

            hoursArray.append(previousHours)
}

对于小时20,这个列表形成了 -

21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,18,19,20,21

而不是

  

小时 - 24 +我

什么公式会产生正确的结果?是否有更简单的方法来获得相同的结果?

3 个答案:

答案 0 :(得分:0)

试试这个

for i in 1...24 {
    hoursArray.append(i)
}

let myHour = 20 //like your example 

let hoursAfter = hoursArray.filter { $0 > myHour }
let hoursBefore = hoursArray.filter { $0 < myHour }

let cycle = hoursAfter + hoursBefore

这里有21小时到24小时,然后是1到19小时

或者如果你换个方法,那就

cycle.reversed()

答案 1 :(得分:0)

也许喜欢这样的东西?

var hrs = [Int]()
var start = 15
while hrs.count < 24 {
    if start < 24 {
        hrs.append(start)
        start += 1
    } else {
        start = 1
    }
}
hrs.reverse()

使用日历计算,如上面的评论所述,这个从0到23开始计算:

var hrs = [Int]()
let date = Date()
let calendar = Calendar.current
let hour = calendar.component(.hour, from: date)
var dayComp = DateComponents()
dayComp.calendar = calendar
dayComp.hour = 0
while hrs.count < 24 {
    let next = calendar.date(byAdding: dayComp, to: date)
    hrs.append(calendar.component(.hour, from: next!))
    dayComp.hour! -= 1
}

输出:

  

18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,23,22,21,20,19

答案 2 :(得分:0)

中公式的微小变化
hour - 24 + i  

hour - i + 24

可以解决问题并提供您需要的输出。