2013-08-20 7 views
1

배열의 객체를 추적하는 데 도움이 필요합니다. 각 객체에 arrayIndex var을 주려고 했으므로 배열의 인덱스를 나타내는 var를 가져 와서 연결할 수 있습니다.배열에서 객체를 추적하는 방법은 무엇입니까?

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

그러나 개체를 다른 배열로 이동하면 문제가 발생할 수 있습니다. 객체가 다른 위치에서 이동하기 때문에 arrayIndex var를 지속적으로 업데이트해야합니다.

각 개체에 정적 ID를 추가하여이 작업을 수행했습니다. for 루프로 나는이 배열에서 객체를 추적하는보다 효율적인 방법이 작동하지만

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); 
} 

을 필요하지가 한 장소에서 다른 장소 같은 객체를 의미합니다, 당신은 몇 가지를 비교할 수 이름처럼, 오브젝트 유형이 고유 키가있는 경우 속성은 ID처럼 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 

} 

를 얻기 위해, 또는 개체의 일부 속성과 고유 키를 만들 수 있습니다 + "_"+ 위해, 당신은 할 수 사용 사전, 파텔처럼 언급했다.

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과 같은 Set 구현을 사용해야한다고 생각합니다. 상수 시간 조회가 필요하며 정렬이 필요하지 않으며 개체를 추가, 제거 및 조회 할 수 있습니다.

관련 문제