Jeśli dobrze zrozumiałem (i proszę mnie poprawić, jeśli się mylę), lista jest zaimplementowana przez tablicę w .NET, co oznacza, że każde usunięcie pozycji na liście spowoduje ponowne przydzielenie całej listy (która w obrót oznacza O(n)
).Jak skutecznie usunąć z listy <T> (C#)?
Rozwijam grę, w grze mam wiele pocisków lecących w powietrzu w dowolnym momencie, powiedzmy 100 pocisków, każda klatka poruszam je o kilka pikseli i sprawdzam kolizję z obiektami w grze, Muszę usunąć z listy każdy trafiony punkt.
Więc zebrać zderzył kulę w innej listy tymczasowego, a następnie wykonaj następujące czynności:
foreach (Bullet bullet in bulletsForDeletion)
mBullets.Remove(bullet);
Ponieważ pętla jest O(n)
i usuń to O(n)
, spędzam O(n^2
) czas usunięcia.
Czy istnieje lepszy sposób na usunięcie go lub bardziej odpowiedni do użycia?
Nie mów przepraszam. Wszyscy jesteśmy tutaj, aby się uczyć. –
Czy jesteś pewien, że masz rzeczywisty problem, czy też optymalizujesz go przedwcześnie? – Oded
Nie mam rzeczywistego problemu, działa z prędkością 60 klatek na sekundę, po prostu "czułem", jakbym pisał coś, co jest nie tak, ponieważ taka operacja nie powinna być O (n^2). – OopsUser