如何跟踪数组中的对象?

时间:2013-08-20 11:51:10

标签: arrays actionscript-3

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

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

但是,如果将对象移动到不同的数组,则会出现问题。对象将从不同的位置移动,因此需要不断更新arrayIndex var。

我通过向每个对象添加静态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多个对象,这可能会造成一些减速

P.S。这些对象被拼接,然后被推送到一个新的数组。

2 个答案:

答案 0 :(得分: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 :(得分:1)

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

相关问题