2013-08-20 123 views
1

我需要幫助跟蹤數組中的對象。我試着給每個對象一個arrayIndex var,所以我可以通過獲取表示數組中索引的var進行拼接。如何跟蹤數組中的對象?

object0.arrayIndex = 0; 
object1.arrayIndex = 1; 
object2.arrayIndex = 2; 
object3.arrayIndex = 3; 

但是,如果您將對象移動到不同的陣列,則會出現問題。對象將從不同的地方移動,因此arrayIndex var需要不斷更新。

我已經通過向每個對象添加一個靜態ID來完成此操作。隨着一個循環我檢查我想拼接

var objectID:Number = objectArrayTarget.id; 
for (var t:int; t<_objectArrayLayer1.length; t++) 
{ 
    if (objectID == _objectArrayLayer1[i].id) 
    { 
     var indexOfObject:Number = (_objectArrayLayer1.indexOf(_objectArrayLayer1[i])); 
    } 
} 
_objectArrayLayer1.splice(indexOfObject, 1); 

雖然這工作是有跟蹤對象的數組的一個更有效的方式相應的對象ID每個對象?有100多個對象,這可能會造成一些減速

P.S.這些對象正在拼接,然後推送到一個新的數組。

回答

4

如果你的「對象會從不同的地方移動」是指從一個地方到另一個地方相同的對象,沒有arrayIndex需要

var indexOfObject:Number = _objectArrayLayer1.indexOf(targetObj); 

if (indexOfObject >= 0) { 

    _objectArrayLayer1.splice(indexOfObject, 1); 
} 

如果這意味着不同的對象,像一個副本,你可以比較的一些性能得到targetObj

for (var t:int = 0; t<_objectArrayLayer1.length; t++) 
{ 
    if (targetObj.id == _objectArrayLayer1[i].id)//assume id is unique key of the object 
    { 
      break;//i is the index here 

    } 
} 

if (i != _objectArrayLayer1.length) {//find target object 

} 

如果對象類型都有一個唯一的關鍵,就像一個ID,也可以使與對象的某些屬性的唯一關鍵,如姓名+「_」 +順序,你可以使用字典,像Patel提到的。

var dic:Dictionary = new Dictionary(true); 

dic[obj1.id] = obj1; 
dic[obj2.id] = obj2;//assume id the unique key,or you can use other key 

所以,你可以找到OBJ喜歡這個

var obj:Object = dic[target.id] 
1

而不是使用數組。 我認爲你應該使用像Hashset的集合實現 你會得到恆定的時間查找,不需要排序,你可以添加,刪除和查找對象。