我试图找到一个使用javascript实现以下目标的对称差异的解决方案:
因此,例如,如果输入是([1,1,2,6],[2,3,5],[2,3,4]),解决方案将是,[1,1,6,5] ,4].
我试图解决这个问题,因为在线编码社区提出了挑战.挑战状态的确切说明,
创建一个带有两个或更多数组的函数,并返回所提供数组的对称差异数组.
数学术语对称差异是指两组中的元素,它们在第一组或第二组中,但不在两者中.
虽然我的解决方案下面找到了每个数组唯一的数字,但它会消除所有出现多次的数字,并且不会保持数字的顺序.
我的问题非常接近于在javascript中找到多个数组中的对称差异/唯一元素的问题.但是,该解决方案不保留数字的原始顺序,也不保留单个数组中出现的唯一数字的重复.
function sym(args){
var arr = [];
var result = [];
var units;
var index = {};
for(var i in arguments){
units = arguments[i];
for(var j = 0; j < units.length; j++){
arr.push(units[j]);
}
}
arr.forEach(function(a){
if(!index[a]){
index[a] = 0;
}
index[a]++;
});
for(var l in index){
if(index[l] === 1){
result.push(+l);
}
}
return result;
}
symsym([1, 1, 2, 6], [2, 3, 5], [2, 3, 4]); // …
Run Code Online (Sandbox Code Playgroud) 这应该是一个简单的算法,但我无法理解其中的逻辑。我需要采用 2 个数组,并仅保留在一个数组或另一个数组中找到的值,而不是同时保留两者。
例如,如果我有
arr1 [1,2,3,6]
arr2 [2,3,4,5,7]
Run Code Online (Sandbox Code Playgroud)
我想要再次有 2 个数组
arr1 [1,6]
arr2 [4,5,7]
Run Code Online (Sandbox Code Playgroud)
编辑:
我删除了旧代码并放入了一些其他工作代码。仍然不是很漂亮,但至少可以工作。我需要做的就是将 arr3 存储到 arr1 中,将 arr4 存储到 arr2 中。
var arr3 = [];
var arr4 = [];
var foundMatch = false;
//find all arr1 elements that don't match arr2 elements
//store into arr4
for(var i=0; i<arr1.length; i++)
{
foundMatch = false;
for(var j=0; j<arr2.length; j++)
{
if(arr1[i] == arr2[j])
{
console.log("match found for [%s] [%s]", i, j);
foundMatch = true;
break;
}
}
if(!foundMatch) …
Run Code Online (Sandbox Code Playgroud) python 集合中的difference()和symmetric_difference()方法之间有什么区别?