我們有數組:兩個嵌套的for /環路而不需要重複對
var arr = [0,1,2];
和循環:
for (var i=0; i<arr.length; i++) {
for (var j=0; j<arr.length; j++) {
if (arr[i] == arr[j]) continue;
console.log(arr[i], arr[j]);
}
}
輸出:
0,1 //a--|
0,2 //b--|--|
1,0 //a--| |
1,2 //c-----|--|
2,0 //b-----| |
2,1 //c--------|
,我們可以看到有被複制對(在評論的a,b和c發生兩次)
我們可以擺脫重複對的唯一方法是將已匹配的對存儲在某種內存中?
var mem = {};
for (var i=0; i<arr.length; i++) {
for (var j=0; j<arr.length; j++) {
var left = i;
var right = j;
if (left > right) {
var temp = right;
right = left;
left = temp;
}
if (arr[i] == arr[j] || mem[arr[left]+","+arr[right]]) continue;
console.log(arr[i], arr[j]);
mem[arr[left]+","+arr[right]] = true;
}
}
輸出:
0,1
0,2
1,2
但這需要額外的內存(更大的陣列,它需要大量的吧..)
是不存在任何存儲附加任何其他方式?
簡短的答案是...沒有 – charlietfl
難道這些循環將是數百萬大,因爲如果不是,我沒有看到過早優化的理由。當這確實會導致可衡量的問題時,可能會有一個可能更有效的過濾器,我不是他們的專家。即使如此,我懷疑它的內存使用率相同,但在代碼中不太明顯。 – Goose