繁体   English   中英

进行切片和循环:遍历切片项,同时在每个循环中减少1个项

[英]Go slices and loops: Multilple loop through slice items while reducing the items with 1 each on each loop

我有一个要多次循环遍历的整数,但是每次执行另一个循环时,我都想从父循环中排除该项目。

像这样:

func main() {
    as := []int{0, 1, 2, 3}
    for i, a := range as {
        bs := make([]int, len(as))
        copy(bs, as)
        bs = append(bs[:i], bs[i+1:]...)
        for i, b := range bs {
            cs := make([]int, len(bs))
            copy(cs, bs)
            cs = append(cs[:i], cs[i+1:]...)
            for i, c := range cs {
                ds := make([]int, len(cs))
                copy(ds, cs)
                ds = append(ds[:i], ds[i+1:]...)
                for _, d := range ds {
                    fmt.Println(a, b, c, d)
                }
            }
        }
    }
}

此代码的输出是:

0123
0132
0213
0231
0312
0321
1023
1032
1203
1230
1302
1320
2013
2031
2103
2130
2301
2310
3012
3021
3102
3120
3201
3210

这就是我想要的。 但是这段代码看起来不太好。 在删除项目之前,我必须多次复制切片,然后在该切片上遍历所有项目。 我是否有更好更好的方法来实现我在这里所做的工作? 我要对看起来像这样的切片执行相同的操作: []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}

我不认为像我已经做过10次一样编写每个循环是做事情的好方法。 有什么建议我该怎么做?

您似乎不知道自己在做什么叫做生成置换 否则,用谷歌搜索一个有效的算法很容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM