如果您需要一个编译时未知的嵌套索引循环集,则可以使用这样的代码。
package mainimport "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]



