给定两个2D数组,我如何判断它们是否相等?
例如:
array1 = [[1,0],[2,1],[3,0]]
array2 = [[1,0],[2,1],[3,1]]
检查array1 == array2是否有效的方法是什么?
答案 0 :(得分:4)
如果相等意味着数组内容具有相同顺序的相同元素,那么最短(但不是最快)方式将是:
JSON.stringify(array1) === JSON.stringify(array2)
这适用于任何维度的数组。
UPDATE:如果您需要一个非常快速的算法,那么简单的迭代将更好地工作。然而,它不那么万无一失,因此为了使您真正安全可靠,您需要花费更多的开发时间。以下是现代浏览器的一种可能解决方案:
function equal(array1, array2) {
if (!Array.isArray(array1) && !Array.isArray(array2)) {
return array1 === array2;
}
if (array1.length !== array2.length) {
return false;
}
for (var i = 0, len = array1.length; i < len; i++) {
if (!equal(array1[i], array2[i])) {
return false;
}
}
return true;
}
以下JSPerf速度测试显示此算法优于短JSON
方法的优势:http://jsperf.com/2d-array-comparion。
答案 1 :(得分:1)
最有效的方法总是取决于数组的大小以及应用程序和使用情况。如果不匹配,您可以检查2个阵列的长度以提前终止,但如果很少发生这种情况,这可能会被视为额外步骤。
boolean areEqual(array array1, array array2){
if array1.length != array2.length
return false;
for (int i=0;i<array1.length; i++)
if(!areEqual(array1[i], array2[i])
return false;
return true;
}
boolean areEqual(int first, int second){
return first == second;
}
答案 2 :(得分:0)
可行的方法是迭代嵌套循环中的所有值,按值比较值。使用在第一次不匹配时设置为false的布尔值,并在测试中断言此布尔值为true。