我试图一次将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/

10-11 08:36