2013-03-23 6 views
8

क्या किसी अन्य सूची से नेस्टेड सूची को निकालने का कोई सुविधाजनक तरीका है यदि यह कुछ आवश्यकताओं को पूरा करता है? उदाहरण के लिए, कहें कि हमारे पास स्टॉप का संग्रह है, और हम प्रत्येक संग्रह को रोकने का निर्णय लेते हैं। प्रत्येक मार्ग से सूची में है। फिर हम प्रत्येक मार्ग को एक सूची में भी लगाने का फैसला करते हैं।सी # सूची से एक सूची को हटा रहा है

तो अब हमारे पास मार्गों की एक सूची है, कोई फैसला करता है कि कुछ प्रकार के मार्गों को वास्तव में मार्ग सूची में शामिल नहीं किया जाना चाहिए। मैं उन मार्गों को कैसे हटा सकता हूं?

उदाहरण कक्षा

public class Stops 
{ 
    public Stops(int _param1, string _param2) 
    { 
     param1 = _param1; 
     param2 = _param2; 
    } 

    public int param1 { get; set; } 
    public string param2 { get; set; } 
} 

सूचियाँ

List<List<Stops>> lstRoutes = new List<List<Stops>>(); 
List<Stops> lstStops = new List<Stops>(); 
List<Stops> lstMoreStops = new List<Stops>(); 

// Create some stops 
for (int i = 0; i < 5; i++) 
{ 
    lstStops.Add(new Stops(i, "some text")); 
} 

lstRoutes.Add(lstStops); 

// Create some more stops 
for (int i = 5; i < 10; i++) 
{ 
    lstMoreStops.Add(new Stops(i, "some more text")); 
} 

lstRoutes.Add(lstMoreStops); 

बनाएं रहा है, कहते हैं lstRoutes से किसी भी मार्ग, किसी भी param1 6 से अधिक मूल्य कैसे निकाल सकते हैं: यहां कुछ नमूना कोड है?

उत्तर

7

सबसे आसान तरीका (जो सभी enumerables के लिए लागू किया जा सकता है, न सिर्फ सूचीबद्ध करता है):

lstRoutes = lstRoutes.Where(r => !r.Any(s => s.param1 > 6)).ToList(); 

यह एक नई सूची तो एक नकल हो जाएगा बनाता है। सबसे कुशल तरीका सूची में उन वस्तुओं को "स्थान नहीं जोड़ना" होगा। दूसरा सबसे कुशल एक नया एक के निर्माण की बजाय स्वयं सूची से आइटम निकालने की जाएगी:

lstRoutes.RemoveAll(r => r.Any(s => s.param1 > 6)); 
+0

हा मैं मैं पहली बार गति में सूची के लिए उन्हें जोड़ने से बचें पाती। दुर्भाग्यवश, प्रारंभिक सूची क्रमिक क्रम का एक गुच्छा है और मेरे पास क्रमिक क्रम से छुटकारा पाने का कार्य है जो समझ में नहीं आता है। आपके द्वारा पोस्ट किए गए कोड का पहला बिट निम्न त्रुटि फेंक दिया: लैम्ब्डा अभिव्यक्ति को टाइप करने के लिए परिवर्तित नहीं कर सकता क्योंकि यह एक प्रतिनिधि प्रकार नहीं है। लेकिन दूसरी बिट महान काम किया। आपका बहुत बहुत धन्यवाद! –

+0

क्या आप जानते हैं कि मैं param1 की अनुक्रमणिका कैसे प्राप्त कर सकता हूं? मुझे पता है कि इस मामले में यह हमेशा 0 होगा, लेकिन प्रत्येक मार्ग में पूर्णांक का समूह शामिल है, और मैं उन सभी मार्गों को हटाना चाहता था जहां 6 से पहले 6 हो गए थे। यदि नहीं, तो कोई बड़ा सौदा नहीं है। मैं या तो इसे समझता हूं या एक और सवाल शुरू करता हूं। –

+0

इसे समझ लिया। आपकी सहायता के लिए एक बार फिर से धन्यवाद। –

0
List<Stops> stop = lstRoutes.Find(delegate(List<Stops> stp) { return stp.param1 > 6; }); 
+0

प्रतिक्रिया के लिए बहुत बहुत धन्यवाद, लेकिन मुझे यह काम करने के लिए प्रतीत नहीं होता। मुझे निम्न त्रुटि मिली: 'System.Collections.Generic.List ' में 'param1' की परिभाषा नहीं है और 'स्टॉप' प्रकार के पहले तर्क को स्वीकार करने वाली कोई एक्सटेंशन विधि 'param1' नहीं मिल सकती है। –

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