1 回答
TA贡献1811条经验 获得超5个赞
如果您需要一组在编译时未知的嵌套索引循环,您可以使用这样的代码。
package main
import "fmt"
// NextIndex sets ix to the lexicographically next value,
// such that for each i>0, 0 <= ix[i] < lens(i).
func NextIndex(ix []int, lens func(i int) int) {
for j := len(ix) - 1; j >= 0; j-- {
ix[j]++
if j == 0 || ix[j] < lens(j) {
return
}
ix[j] = 0
}
}
func main() {
e := [][]string{
{"a1"},
{"b1", "b2"},
{"c1", "c2", "c3"},
{"d1"},
}
lens := func(i int) int { return len(e[i]) }
for ix := make([]int, len(e)); ix[0] < lens(0); NextIndex(ix, lens) {
var r []string
for j, k := range ix {
r = append(r, e[j][k])
}
fmt.Println(r)
}
}
输出是:
[a1 b1 c1 d1]
[a1 b1 c2 d1]
[a1 b1 c3 d1]
[a1 b2 c1 d1]
[a1 b2 c2 d1]
[a1 b2 c3 d1]
- 1 回答
- 0 关注
- 191 浏览
添加回答
举报