1

我需要帮助来跟踪数组中的对象。我尝试给每个对象一个arrayIndex var,所以我可以通过获取表示数组中索引的那个var来拼接。

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

但是,如果您将对象移动到不同的数组,就会出现问题。对象会从不同的地方移动,因此 arrayIndex 变量需要不断更新。

我通过为每个对象添加一个静态 ID 来做到这一点。使用 for 循环,我检查每个对象是否有我想要拼接的相应对象 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);

虽然这可行,但是否有更有效的方法来跟踪数组中的对象?对于 100 多个对象,这可能会造成一些减速

PS 这些对象正在被拼接,然后被推送到一个新的数组中。

4

2 回答 2

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]
于 2013-08-20T13:23:55.097 回答
1

而不是使用数组。我认为您应该使用像 Hashset 这样的 Set 实现您将获得恒定时间查找,无需排序,您可以添加、删除和查找对象。

于 2013-08-20T12:00:59.980 回答