如果我理解正確(如果我錯了,請糾正我),列表是由.NET中的數組實現的,這意味着每次刪除列表中的項目都將導致重新分配所有列表(在轉動意味着O(n)
)。我正在開發一款遊戲,在遊戲中,我有很多子彈在任何給出的時刻都會在空中飛翔,比方說100個子彈,每一幀我都將它們移動幾個像素,並檢查與遊戲中物體的碰撞,我需要從列表中刪除每一顆相撞的子彈。如何從列表<T>高效地刪除(C#)?
所以我收集另一個臨時列表中的子彈相撞,然後執行以下操作:
foreach (Bullet bullet in bulletsForDeletion)
mBullets.Remove(bullet);
由於環路是O(n)
和刪除是O(n)
,我花O(n^2
)時間來消除。
有沒有更好的方法來刪除它,或更適合收藏使用?
不要說對不起。我們都在這裏學習。 –
你確定你有一個實際的問題,或者你是否過早優化? – Oded
我沒有實際的問題,它運行在60 fps,我只是「感覺」像我寫的東西是錯誤的,因爲這樣的操作不應該是O(n^2)。 – OopsUser