यदि मैं सही ढंग से समझ गया (और अगर मैं गलत हूं तो कृपया मुझे सही करें), सूची .NET में सरणी द्वारा कार्यान्वित की गई है, जिसका अर्थ है कि सूची में किसी आइटम का प्रत्येक हटाना सभी सूची का पुन: आवंटन करेगा (जिसमें बारी का मतलब O(n)
) है।सूची <T> से कुशलता से कैसे निकालें (सी #)?
मैं एक खेल विकसित कर रहा हूं, इस खेल में मेरे पास किसी भी क्षण में हवा में कई गोलियां उड़ती हैं, आइए 100 गोलियां कहें, प्रत्येक फ्रेम मैं उन्हें कुछ पिक्सेल से ले जाता हूं और गेम में ऑब्जेक्ट्स के साथ टकराव की जांच करता हूं, मुझे टकराए गए प्रत्येक बुलेट की सूची से हटाना होगा।
तो मैं एक और अस्थायी सूची में टकरा गई गोली को इकट्ठा करने और उसके बाद निम्न:
foreach (Bullet bullet in bulletsForDeletion)
mBullets.Remove(bullet);
क्योंकि पाश O(n)
है और निकालें O(n)
है, मैं O(n^2
) समय दूर करने के लिए खर्च करते हैं।
क्या इसे हटाने का बेहतर तरीका है, या उपयोग करने के लिए अधिक उपयुक्त संग्रह है?
क्षमा न करें। हम सब यहाँ सीखने के लिए। –
क्या आप वाकई एक वास्तविक समस्या है, या आप समय से अनुकूलित कर रहे हैं? – Oded
मुझे वास्तविक समस्या नहीं है, यह 60 एफपीएस पर चलता है, मैं बस "महसूस" करता हूं जैसे कि मैं कुछ गलत लिख रहा हूं क्योंकि ऐसा ऑपरेशन ओ (एन^2) नहीं होना चाहिए। – OopsUser