精華區beta Flash 關於我們 聯絡資訊
※ 引述《cjcat2266 (CJ Cat)》之銘言: : ※ 引述《kaiyine (yumi)》之銘言: : : 陣列a是5,2,6,8,4 : : 陣列b是0,1,2,3,4,5,6,7,8,9,10 : : 我要如何列出陣列a缺少0,1,2,3,7,9,10呢? : 這就是"集合"的問題了 : 同上一篇回文所說的,可以用associative array : (如果是AS3就可以用Dictionary class,相當於C++的map class) : 其實可以更簡短的寫 : (以下code未經過測試,可能有錯字) : var a:Array = [5, 2, 6, 8, 4]; : var b:Array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; : //集合物件 : var obj:Object = new Object(); : var i:Number, len:Number; : //讓a的元素作為key,跟true值產生關連 : for (i = 0, len = a.length; i < len; ++i) { : obj[a[i]] = true; : } : //尋找"a沒有,b有的元素" : for (i = 0, len = b.length; i < len; ++i) { : //若obj[b[i]]沒有關聯值,那就是undefined,!undefined == true : if (!obj[b[i]]) { : trace("a沒有含" + b[i]); : } : } 也可以存 inverse A,不過其實是一樣的 多花了點記憶體,得到了一些加速 假設: A陣列中沒有重複出現相同的值 程式: var i:Number; var a:Array = [5, 2, 6, 8, 4]; var b:Array = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; var aLength : Number = a.length; var bLength : Number = b.length; //建立A的反向表 此處inverseA的型態是陣列 var inverseA:Array = []; for (i = 0 ; i < aLength; i++ ) inverseA[a[i]] = i; var inverseALength : Number = inverseA.length; //多花的記憶體在 inverseA trace("aLength = " + aLength); //aLength = 5 trace("bLength = " + bLength); //bLength = 11 trace("inverseALength = " + inverseALength); //inverseALength = 9 //尋找"a沒有,b有的元素" for (i = 0; i < bLength; i++ ) { //加速在這裡 if(b[i] >= inverseALength) trace("a沒有含" + b[i]); //基本上 Array 的存取也會比 Object 快些 else if(inverseA[b[i]] == undefined) trace("a沒有含" + b[i]); } 為了確認Array 的空值是 undefined 只好打開 flash cs4 所以上面的程式已經測過了 -- blog:http://etrex.blogspot.com/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.168.161.83
hpuser:請問inverseA的長度為什麼是9呢?想很久想不通@@? 10/10 03:10
hpuser:不是才跑5次嗎? 10/10 03:11
ComicMan:cool!!! 10/10 04:21
ComicMan:因為inverseA[a[i]] = i; 有一個inverseA[8] = 3; 10/10 04:22