一次添加两个项目以构建for循环

时间:2017-08-25 11:56:43

标签: go

我试图一次向结构数组添加2个项目,然后连续每2个项目创建一个新的结构数组并追加到最终的Container结构。我正在努力寻找合适的方法。

进一步说明我的意思:

package main

import "fmt"

type Container struct {
    Collection []SubContainer
}

type SubContainer struct {
    Key   string
    Value int
}

func main() {
    commits := map[string]int{
        "a": 1,
        "b": 2,
        "c": 3,
        "d": 4,
        "e": 5,
        "f": 6,
    }

    sc := []SubContainer{}
    c := Container{}

    for k, v := range commits {
        sc = append(sc, SubContainer{Key: k, Value: v})
    }

    for _, s := range sc {
        c.Collection = append(c.Collection, s)
    }

    fmt.Println(c)
}

链接:https://play.golang.org/p/OhSntFT7Hp

我希望的行为是循环遍历所有commits,每次SubContainer到达len(2)时,都会附加到Container,并创建一个新SubContainer直到for循环完成。如果元素数量不均匀,那么最后一个SubContainer将只保留一个元素并像正常一样附加到Container。

有没有人对如何做到这一点有任何建议?抱歉,如果这是一个明显的答案,对Go来说很新!

1 个答案:

答案 0 :(得分:1)

您可以通过将切片设置为nil来“重置”切片。此外,您可能不知道nil-slices在附加时工作正常:

var sc []SubContainer
c := Container{}

for k, v := range commits {
    sc = append(sc, SubContainer{Key: k, Value: v})
    if len(sc) == 2 {
        c.Collection = append(c.Collection, sc...)
        sc = nil
    }
}
if len(sc) > 0 {
    c.Collection = append(c.Collection, sc...)

}

https://play.golang.org/p/ecj52fkwpO