2012-06-02 15 views
5

मैं अपनी सूची में इनट्स का एक गुच्छा समाप्त कर रहा हूं (नाम "listInts")।सूची <int> से नकारात्मक मानों को कैसे निकालें?

जो किसी को भी आश्चर्यचकित नहीं करना चाहिए।

मेरी समस्या यह है कि मैं वहां कोई नकारात्मक संख्या नहीं चाहता हूं, लेकिन तीन, विशेष रूप से -1, -2, और -3 होने की संभावना है।

मैं अनाड़ीपन से उन्हें के माध्यम से निकाल सकते हैं:

if (listInts.Contains(-1) { 
    int i = listInts.IndexOf(-1); 
    listInts.Remove(i); 
    // etc. 
} 

... लेकिन मैं इस polecats की एक पूरी passle की तुलना में एक कोड गंध stenchier exhudes पता है।

बेहतर तरीका क्या है?

उत्तर

8

मैं LINQ का प्रयोग करेंगे:

listInts = listInts.Where(i => i >= 0).ToList(); 

यह कैसे इस्तेमाल किया जा रहा है पर निर्भर करता है, आप भी ToList() कॉल से बच सकते हैं और मूल्यों सहेज नहीं:

var positiveInts = listInts.Where(i => i >= 0); 

यह अभी भी दूँगी आप आवश्यकतानुसार गणना करते हैं।

आप जगह में सूची को बदलने की जरूरत है, List<T>.RemoveAll वास्तव में एक अधिक कुशल तरीका है:

listInts.RemoveAll(i => i < 0); 

हालांकि, मैं इस के रूप में यह एक तरीका है कि दुष्प्रभाव का कारण बनता है, और भ्रमित हो जाता है पसंद नहीं करते (इसलिए रखरखाव बाधा) यदि आप अन्य LINQ एक्सटेंशन विधियों का उपयोग कर रहे हैं।

+1

हालांकि। RemoveAll बेहतर होगा क्योंकि इसे एक सूची विधि के रूप में लागू किया गया है, और एक नया निर्माण करने के बजाय सूची में ऑपरेशन करेगा। – SimpleVar

+0

@YoryeNathan मैंने इसका उल्लेख करने के लिए संपादित किया कि, मैं इसे निकालने के लिए क्यों हटाता हूं RemoveAll –

+0

यह उन लोगों को भ्रमित करता है जो नहीं जानते हैं। मैं उम्मीद करता हूं कि कोडर को बनाए रखने की कोशिश करने से पहले कोडिंग को जानना होगा। क्षमता + टिप्पणी = विन। – SimpleVar

संबंधित मुद्दे