Если я правильно понял (и, пожалуйста, поправьте меня, если я ошибаюсь), список реализован массивом в .NET, что означает, что каждое удаление элемента в списке вызовет перераспределение всего списка (что, в свою очередь, означает O(n)
).
Я разрабатываю игру, в игре у меня в любой момент летает много пуль, скажем, 100 пуль, каждый кадр я перемещаю их на несколько пикселей и проверяю на столкновение с объектами в игре, мне нужно удалить из списка каждая пуля, которая столкнулась.
Поэтому я собираю столкнувшуюся пулю в другой временный список, а затем делаю следующее:
foreach (Bullet bullet in bulletsForDeletion)
mBullets.Remove(bullet);
Поскольку цикл O(n)
, а удаление O(n)
, я трачу O(n^2
) времени на удаление.
Есть ли лучший способ удалить его или использовать более подходящую коллекцию?