私が正しく理解していれば (間違っている場合は訂正してください)、リストは .NET の配列によって実装されます。つまり、リスト内の項目を削除するたびに、すべてのリストが再割り当てされます (つまり、O(n)
)。
私はゲームを開発しています。ゲームでは、特定の瞬間に多くの弾丸が空中を飛んでいます.100個の弾丸としましょう.フレームごとに数ピクセルずつ移動し、ゲーム内のオブジェクトとの衝突をチェックします.削除する必要がありますリストから衝突したすべての弾丸。
そこで、衝突した弾丸を別の一時リストに集めてから、次のことを行います。
foreach (Bullet bullet in bulletsForDeletion)
mBullets.Remove(bullet);
ループはO(n)
であり、削除はであるため、削除に) 時間をO(n)
費やします。O(n^2
それを削除するより良い方法、またはより適切なコレクションを使用する方法はありますか?