2011-03-26 76 views
0

我碰到這個線程傳來:如何在actionscript 3中實現createuniqueCopy()?

Is there a function like array_merge in PHP in actionscript 3?

PHP有一個內置的功能,這是否:

array array_merge (array $array1 [, array $array2 [, array $... ]]) 

,似乎我需要包括的as3corelib庫,以使用createuniqueCopy

如何實施createuniqueCopy以減小swf的大小?

+0

我很抱歉,但我感到困惑的問題,你想知道如何實現圖書館或做createuniqueCopy不使用的as3corelib ? – Saad 2011-03-26 07:24:11

+0

@ Saad,我想知道如何在不使用as3corelib的情況下實現createuniqueCopy。 – 2011-03-26 07:34:24

回答

0

我會鼓勵你使用ArrayUtil作爲as3core庫的一部分。該文件只有5kb,並且只包含一些功能,因此非常輕便。如果你導入它,Flash足夠聰明,只包含它所需的文件,所以它不會從整個as3core庫中引入所有的代碼。

在另一方面,如果你真的想創造你自己的,這樣做:

var a1:Array = ["a", "b", "c"]; 
var a2:Array = ["b", "j", "e"]; 

var a3:Array = a1.concat(a2); 
a3 = uniqueArray(a3); 

trace(a3); // a,b,c,j,e 

function uniqueArray(a:Array):Array { 
    var newA:Array = []; 
    for (var i:int = 0; i < a.length; i++) { 
     if(newA.indexOf(a[i]) === -1) newA.push(a[i]); 
    } 
    return newA; 
} 

編輯(問題是在評論澄清)

如果你正在使用關聯數組, Adobe建議使用對象,而非數組用於關聯數組。見http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/Array.html

的Adobe不要使用Array類創建關聯數組(也稱爲哈希),它們是包含命名元素而不是編號元素的數據結構。要創建關聯數組,請使用Object類。儘管ActionScript允許您使用Array類創建關聯數組,但不能將任何Array類方法或屬性與關聯數組一起使用。

因此,解決這樣的問題:

var a1:Object = {}; 
var a2:Object = {}; 

a1["a"] = "the a"; 
a1["b"] = "the b"; 
a2["b"] = "the b2"; 
a2["c"] = "the c"; 

var a3:Object = uniqueArray(a1, a2); 

for each(var i:* in a3) { 
    trace(i); 
} 
// outputs [the a, the b, the c] 
// 'the b2' is omitted because 'b' key already exists 

function uniqueArray(a1:Object, a2:Object):Object { 
    var newA:Object = {}; 

    for(var i:String in a1) { 
     newA[i] = a1[i];   
    } 
    for(var j:String in a2) { 
     if(newA[j] === undefined) newA[j] = a2[j]; 
    } 
    return newA; 
} 
+0

它不適用於關聯數組... – 2011-03-26 10:48:39

0

1)你不需要使用整個庫,只需導入arrayUtils類: https://github.com/mikechambers/as3corelib/blob/master/src/com/adobe/utils/ArrayUtil.as

,然後使用功能: 變種C:陣列= ArrayUtil.createUniqueCopy(a1.concat(A2 ));

  • 這將排除重複,序有正好與重複相同的價值觀只是刪除:

    如果(ArrayUtil.arrayContainsValue(newArray,項目)){ 繼續; }

從createUniqueCopy功能

一些例子: Cleanly merge two arrays in ActionScript (3.0)?