JavaScript 中给出的示例:
假设我们有两个数组 [0,0,0] 和 [1,1,1]。产生这两个数组组合的所有可能方式的算法是什么?例子:
mergeEveryWayPossible([0,0,0],[1,1,1]) // [ [0,0,0],[1,0,0], [0,1,0], [0,0,1], [1,1,0], [0,1,1], [1,0,1], [1,1,1] ]
将数组合并为所有可能组合的数组。这与求笛卡尔积不同。
我也不知道这种组合叫什么。如果算法或技术有名称,请分享。
您可以将值转换为这种格式的数组
[ [0, 1], [0, 1], [0, 1] ]
然后通过迭代外部和内部数组来构建新的结果集。
var data = [[0, 0, 0], [1, 1, 1]], values = data.reduce((r, a, i) => (a.forEach((b, j) => (r[j] = r[j] || [])[i] = b), r), []), result = values.reduce((a, b) => a.reduce((r, v) => r.concat(b.map(w => [].concat(v, w))), [])); console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }