猿问

如何获得一片元组(小时,分钟)

我有一个我无法解决的问题。我正在使用https://github.com/kmanley/golang-tuple创建元组。


我有一份会议记录清单:


minutes := int{0, 30} // Minutes are 0 and 30

以及四个参数:start, startBreak, stop, stopBreak:


start := tuple.NewTupleFromItems(9, 30) // It represents "9:30"

startBreak := tuple.NewTupleFromItems(12, 0) // It represents "12:00"

stop := tuple.NewTupleFromItems(21, 0) // It represents "21:00"

stopBreak := tuple.NewTupleFromItems(14, 30) // It represents "14:30"

(hour, minutes)我想使用切片中的所有分钟来获得一片元组minutes,并且它们不能包含在范围内startBreak-stopBreak(它可以等于startBreakor stopBreak,因此范围将变为12:30, 13:00, 13:30, 14:00)和stop-start(它可以等于startand stop,因此范围会变成21:30, 22:00, 22:30, ..., 8:30, 9:00)。


例如,使用这四个参数,最终结果将是:


9:30, 10:00, 10:30, 11:00, 11:30, 12:00, 14:30, 15:00, 15:30, 16:00, 16:30, 17:00, 17:30, 18:00, 18:30, 19:00, 19:30, 20:00, 20:30, 21:00


湖上湖
浏览 94回答 1
1回答

当年话下

这是演示这一点的最小代码,我没有进行任何数据验证。func periods(minutes, start, startBreak, stopBreak, stop *tuple.Tuple) (out []tuple.Tuple) {    // next() moves current to the next minute interval    i := 0    curr := tuple.NewTupleFromItems(start.Get(0), minutes.Get(0))    next := func() {        i = (i + 1) % minutes.Len()        curr.Set(1, minutes.Get(i))        if i == 0 {            curr.Set(0, curr.Get(0).(int)+1)        }    }    for ; curr.Le(stop); next() {        if (curr.Ge(start) && curr.Le(startBreak)) || (curr.Ge(stopBreak) && curr.Le(stop)) {            out = append(out, *curr.Copy())        }    }    return out}操场
随时随地看视频慕课网APP

相关分类

Go
我要回答