我试图一次向结构数组添加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来说很新!
答案 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...)
}