怎么用 golang 搞一个 [多维的笛卡尔积] 呀?
有这么个需求, 给一组维度, 维度的数量不固定, 各个维度的取值数目也不一定。 类似
di: 0, 1, 2 dj: 0, 1 dk: 0, 1, 2, 3, 4 ...
怎么取得这么一组给定不定长维度下值的组合?
# example package main import "fmt" var ( di = []int{0, 1, 2} dj = []int{0, 1} dk = []int{0, 1, 2, 3, 4} ) func main() { getResult(di, dj, dk) } func getResult(di, dj, dk []int) { for _, i := range di { for _, j := range dj { for _, k := range dk { fmt.Printf("[%d, %d, %d] t", i, j, k) } } } }
# result [0, 0, 0] [0, 0, 1] [0, 0, 2] [0, 0, 3] [0, 0, 4] [0, 1, 0] [0, 1, 1] [0, 1, 2] [0, 1, 3] [0, 1, 4] [1, 0, 0] [1, 0, 1] [1, 0, 2] [1, 0, 3] [1, 0, 4] [1, 1, 0] [1, 1, 1] [1, 1, 2] [1, 1, 3] [1, 1, 4] [2, 0, 0] [2, 0, 1] [2, 0, 2] [2, 0, 3] [2, 0, 4] [2, 1, 0] [2, 1, 1] [2, 1, 2] [2, 1, 3] [2, 1, 4]
如果维度再增加, 还得手动加上一套for range。 有没有更好的解决方案?