登录
首页 >  Golang >  Go问答

如何获取元组切片(小时、分钟)

来源:stackoverflow

时间:2024-04-08 23:21:34 315浏览 收藏

今天golang学习网给大家带来了《如何获取元组切片(小时、分钟)》,其中涉及到的知识点包括等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,若是看完有所收获,也希望大家能多多点赞支持呀!一起加油学习~

问题内容

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

我有一份会议记录清单:

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

还有四个参数:startstartbreakstopstopbreak

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"

我想使用 minutes 切片中的所有分钟来获取元组 (hour, 分钟) 的切片,并且它们不得包含在 startbreak-stopbreak 范围内(它可以等于 startbreakstopbreakzqbendczq乙,所以范围将变为 12:30, 13:00, 13:30, 14:00) 和 stop-start (它可以等于 startstop,因此范围将变为 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

解决方案


这是演示这一点的最小代码,我没有进行任何数据验证。

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
}

Playground

到这里,我们也就讲完了《如何获取元组切片(小时、分钟)》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>