Se ho capito correttamente (e per favore correggimi se ho torto), la lista è implementata da array in .NET, il che significa che ogni cancellazione di un elemento nell'elenco causerà la riassegnazione di tutta la lista (che in turn significa O(n)
).Come rimuovere dalla Lista <T> in modo efficiente (C#)?
sto sviluppando un gioco, nel gioco ho molti proiettili volano in aria su qualsiasi dando momento, diciamo 100 proiettili, ogni fotogramma li sposta da pochi pixel e verificare la presenza di collisioni con gli oggetti nel gioco, Devo rimuovere dall'elenco ogni proiettile che si è scontrato.
Così ho raccogliere il proiettile entrato in collisione in un altro elenco temporanea e quindi effettuare le seguenti:
foreach (Bullet bullet in bulletsForDeletion)
mBullets.Remove(bullet);
Poiché il ciclo è O(n)
e la rimozione è O(n)
, passo O(n^2
) tempo per rimuovere.
C'è un modo migliore per rimuoverlo o una raccolta più adatta da usare?
Non dire scusa. Siamo tutti qui per l'apprendimento. –
Sei sicuro di avere un problema reale o stai ottimizzando in modo prematuro? – Oded
non ho un problema reale, funziona a 60 fps, mi sono semplicemente "sentito" come se stessi scrivendo qualcosa che è sbagliato perché tale operazione non dovrebbe essere O (n^2). – OopsUser