हाल ही में, मैं कोड का एक बहुत है कि इस तरह दिखता है लिख दिया गया है:क्या सी # सूची <T> से आइटम को हटा रहा है अन्य आइटम के ऑर्डर बनाए रखें?
List<MyObject> myList = new List<MyObject>();
...
for(int i = 0; i < myList.Count; ++i)
{
if(/*myList[i] meets removal criteria*/)
{
myList.RemoveAt(i);
--i; //Check this index again for the next item
//Do other stuff as well
}
}
और मैं सिर्फ एक छोटे से पागल है कि शायद सूची हटाने पर वस्तु क्रम को बनाए रखने नहीं है बन गया। मैं निश्चित रूप से जानने के लिए पर्याप्त सी # spec नहीं जानता। क्या कोई यह सत्यापित कर सकता है कि मैं या तो इस पैटर्न के साथ परेशानी नहीं मांग रहा हूं?
संपादित करें: शायद मुझे यह स्पष्ट करना चाहिए कि उपर्युक्त एक बहुत ही सरल उदाहरण है और यदि आइटम को हटाया जाना चाहिए तो अधिक चीजें होती हैं इसलिए मुझे नहीं लगता कि List<T>.RemoveAll()
बहुत लागू है। हालांकि यह एक अच्छा काम है। मैंने विशेष रूप से उल्लेख करने के लिए उपरोक्त if()
ब्लॉक में एक टिप्पणी जोड़ा है।
बस एक तरफ नोट: आपको आगे की बजाय सूची के पीछे लूप करना चाहिए। मान लें कि आप सूची हटाएं [1] (i = 1)। इससे सूची में बदलाव आएगा, जहां सूची में तत्व [2] अब सूची में है [1]। अब जब आप i = 2 पर कूदते हैं, तो आपने उस तत्व को छोड़ दिया है जो अब सूची में बैठता है [1]। –
आपको RemoveAll() विधि –
के साथ इस पैटर्न को बहुत सरल बनाने में सक्षम होना चाहिए, इसके लिए आप linq का उपयोग क्यों नहीं करते? – Andre