"RemoveAll" विधि सर्वोत्तम है।
एक अन्य आम तकनीक है:
var itemsToBeDeleted = collection.Where(i=>ShouldBeDeleted(i)).ToList();
foreach(var itemToBeDeleted in itemsToBeDeleted)
collection.Remove(itemToBeDeleted);
एक अन्य आम तकनीक पाश "के लिए" एक का उपयोग करने के लिए, लेकिन यकीन है कि तुम जाओ बनाने है पीछे की ओर:
for (int i = collection.Count - 1; i >= 0; --i)
if (ShouldBeDeleted(collection[i]))
collection.RemoveAt(i);
एक अन्य आम तकनीक को जोड़ने के लिए है आइटम जो नए संग्रह में हटाए जा रहे हैं:
var newCollection = new List<whatever>();
foreach(var item in collection.Where(i=>!ShouldBeDeleted(i))
newCollection.Add(item);
और अब आपके पास दो संग्रह हैं। एक तकनीक जिसे मैं विशेष रूप से पसंद करता हूं यदि आप दो संग्रहों के साथ समाप्त करना चाहते हैं तो अपरिवर्तनीय डेटा संरचनाओं का उपयोग करना है। एक अपरिवर्तनीय डेटा संरचना के साथ, किसी आइटम को "निकालना" डेटा संरचना को नहीं बदलता है; यह आपको एक नई डेटा संरचना देता है (यदि संभव हो तो पुराने से बिट्स का पुन: उपयोग करता है) जिसमें आपके द्वारा निकाली गई वस्तु नहीं है। अपरिवर्तनीय डेटा संरचनाओं के साथ आप बात तुम पर पुनरावृत्ति कर रहे हैं संशोधित कर रहे हैं नहीं, इसलिए कोई समस्या नहीं है:
var newCollection = oldCollection;
foreach(var item in oldCollection.Where(i=>ShouldBeDeleted(i))
newCollection = newCollection.Remove(item);
या
var newCollection = ImmutableCollection<whatever>.Empty;
foreach(var item in oldCollection.Where(i=>!ShouldBeDeleted(i))
newCollection = newCollection.Add(item);
और जब आप पूरा कर लें, आप दो संग्रह है। नए आइटम को हटा दिया गया है, पुराना एक जैसा ही था।
स्रोत
2012-01-09 16:28:01
के संभावित डुप्लिकेट (http://stackoverflow.com/questions/653596/how-to-conditionally-remove-items-from-a-net- [सशर्त एक .NET संग्रह से आइटम निकालने का तरीका] संग्रह) –