我试图一次将2个项目添加到一个struct数组中,然后连续每2个项目创建一个新的struct数组并追加到最终的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来说是很新的!
最佳答案
您可以通过将 slice 设置为nil来“重置” slice 。另外,您可能不知道nil-slices与append一起工作还不错:
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
关于go - 一次添加两个项目以构造for循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45880883/