笛卡尔乘积的反转
Reverse of a cartesian product
本文关键字:笛卡尔 更新时间:2023-09-26
给定以下代码:
function cartesianProductOf() {
return _.reduce(arguments, function(a, b) {
return _.flatten(_.map(a, function(x) {
return _.map(b, function(y) {
return x.concat([y]);
});
}), true);
}, [ [] ]);
};
var cp = cartesianProductOf([1, 2], [3, 4], ['a', 'b']); // [[1,3,"a"],[1,3,"b"],[1,4,"a"],[1,4,"b"],[2,3,"a"],[2,3,"b"],[2,4,"a"],[2,4,"b"]]
我正在寻找一种逆转该过程的方法,例如
reverseCartesian(cp,[3,4]); // [[1,'a'],[1,'b'],[2,'a'],[2,'b']]
我不认为这在真实数据下会表现得更快,但你可以这样做
function reverseCartesian(cp, arr) {
return _.chain(cp)
.map(_.partial(_.difference, _, arr))
.uniq(function(currentItem) {
return currentItem.join("|");
})
.value();
}
console.log(reverseCartesian(cp, [3, 4]));
// [ [ 1, 'a' ], [ 1, 'b' ], [ 2, 'a' ], [ 2, 'b' ] ]
注意:如果数组中包含|
元素,这将无法正常工作。仔细选择此字符(或字符集),以便它们不会出现在数组中。
相关文章:
- 通过js在新选项卡中有条件地打开url
- 多维数组的笛卡尔乘积
- 没有重复的笛卡尔乘积
- 笛卡尔乘积的反转
- 计算 1 个数组中元素的笛卡尔乘积
- 卡鲁弗雷德塞尔将类添加到活动幻灯片
- 通过循环访问未知数量的数组来创建JavaScript对象的笛卡尔乘积(powerset?)
- 拉斐尔SVG路径的一部分卡在原地
- 如何调整卡鲁弗雷德塞尔滑块的上边距
- 2 个数组的笛卡尔积
- javascript中对象的笛卡尔乘积
- 如何将两个数组组合为笛卡尔积
- 如何使用科学记数法使(笛卡尔)图表轴按比例缩放
- [Javascript]获取所有数组组合(笛卡尔乘积)
- 如何在javascript中实现不同长度n数组的笛卡尔乘积
- 在javascript中获取最近的笛卡尔轴对齐矢量
- 实现卡尔曼滤波器以平滑来自 deviceOriented API 的数据
- 极坐标到笛卡尔坐标的函数没有输出正确的数据
- 英特尔XDK保存pdf到存储卡文件传输.下载- android
- 笛卡尔坐标与球坐标的转换