如何生成多组二元集合的有序组合 各位置元素取自对应输入数组
按固定位置取数的多集合组合方案
你需要的这种结果对应位置元素严格取自对应顺序输入集合的全组合,本质是有序多集合的笛卡尔积,实现逻辑如下:
示例输入
let a1 = ['b', 'z'] let a2 = ['j', 'q'] let a3 = ['i', 'y']
通用实现(JavaScript 版本,支持任意数量输入集合)
// 入参arrays为按取数顺序排列的集合数组,比如传入[a1,a2,a3] function cartesian(arrays) { if (arrays.length === 0) return [[]] const first = arrays[0] const rest = cartesian(arrays.slice(1)) const result = [] for (const f of first) { for (const r of rest) { result.push([f, ...r]) } } return result }
调用与输出
调用代码:
const res = cartesian([a1, a2, a3]) console.log(res)
输出结果完全符合要求:
['b', 'j', 'i'] ['b', 'j', 'y'] ['b', 'q', 'i'] ['b', 'q', 'y'] ['z', 'j', 'i'] ['z', 'j', 'y'] ['z', 'q', 'i'] ['z', 'q', 'y']
逻辑说明
- 传入的集合顺序决定了结果每个位置的取数来源,第一个集合对应结果第一位,第二个对应第二位,以此类推
- 递归计算剩余集合的笛卡尔积后,与当前集合的每个元素做拼接,即可得到全量符合规则的组合
内容的提问来源于stack exchange,提问作者mindfullsilence
相关产品推荐
相关产品推荐

