如果我理解正确的话(如果我错了请纠正我),在.NET中列表是由数组实现的,这意味着每删除一个列表项都会导致整个列表的重新分配(这反过来又意味着O(n))。
我正在开发一款游戏,在游戏中我有许多子弹在空中飞行,比如说100颗,每帧我将它们移动几个像素并检测与游戏中物体的碰撞,我需要从列表中移除每个发生碰撞的子弹。
所以我将碰撞的子弹收集到另一个临时列表中,然后执行以下操作:
由于循环是
是否有更好的方式来进行删除操作,或者使用更适合的数据结构呢?
我正在开发一款游戏,在游戏中我有许多子弹在空中飞行,比如说100颗,每帧我将它们移动几个像素并检测与游戏中物体的碰撞,我需要从列表中移除每个发生碰撞的子弹。
所以我将碰撞的子弹收集到另一个临时列表中,然后执行以下操作:
foreach (Bullet bullet in bulletsForDeletion)
mBullets.Remove(bullet);
由于循环是
O(n)
,删除操作也是 O(n)
,所以我需要 O(n^2)
时间来执行删除操作。是否有更好的方式来进行删除操作,或者使用更适合的数据结构呢?