2012-10-30 8 views
23

सूची से किसी विशिष्ट श्रेणी में सभी आइटमों का चयन करने और इसे एक नए में रखने का सबसे प्रभावी तरीका क्या होगा?सूची से किसी विशिष्ट श्रेणी (3 - 7) में आइटम कैसे प्राप्त करें?

List<DataClass> xmlList = new List<DataClass>(); 

यह मेरी सूची है, और मैं रेंज (3 - 7) के बीच सभी DataClass आइटम डाल चाहते हैं एक नई सूची में।

सबसे कुशल तरीका क्या होगा? एक फोरैच लूप जो उस समय ++ गिनती करता है जब तक कि वह सीमा के बीच की वस्तुओं तक पहुंचता है और उन वस्तुओं को नई सूची में जोड़ता है?

+0

[आरंभ और अंत सूचकांक के आधार पर सूचीबद्ध का एक हिस्सा बना रहे] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/11566857/grabbing-a-part-of-the-listitem-by- स्टार्ट-एंड-एंड-इंडेक्स) – nawfal

उत्तर

51

विधि आप की मांग कर रहे GetRange है:

List<int> i = new List<int>(); 
List<int> sublist = i.GetRange(3, 4); 

var filesToDelete = files.ToList().GetRange(2, files.Length - 2); 

सारांश से:

// Summary: 
//  Creates a shallow copy of a range of elements in the source System.Collections.Generic.List<T>. 
// Parameters: 
// index: 
//  The zero-based System.Collections.Generic.List<T> index at which the range 
//  starts. 
// count: 
//  The number of elements in the range. 
1

सूची CopyTo विधि लागू करती है जो आपको प्रतिलिपि बनाने के लिए तत्वों की प्रारंभ और संख्या निर्दिष्ट करने देती है। मैं इसका उपयोग करने का सुझाव दूंगा।

देखें: http://msdn.microsoft.com/en-us/library/3eb2b9x8.aspx

18

किसी भी कारण से आप GetRange उपयोग करने के लिए पसंद नहीं है विधि, आप LINQ का उपयोग करके निम्नलिखित भी लिख सकते हैं।

List<int> list = ... 
var subList = list.Skip(2).Take(5).ToList(); 
+1

मेरा सुझाव है कि आप इसके बजाय 'ToList' एक्सटेंशन का उपयोग करें:' सूची कॉपी = सूची। स्किप (2)। टेक (5)। टोस्टिस्ट() '। यह मूल रूप से वही काम कर रहा है लेकिन मुझे LINQ अभिव्यक्ति के लिए यह अधिक प्राकृतिक फिट लगता है। –

+0

@ मार्टिन लिवरेज नोट करें कि यह केवल एक दृश्य अंतर है, जब तक आप किसी अज्ञात प्रकार से निपट नहीं रहे हैं (जिस स्थिति में आपको * 'toList' की आवश्यकता है)। कार्यात्मक रूप से दोनों वस्तुतः समान हैं। – Servy

+0

नोट करें कि सूचीबद्ध करें बड़े संग्रह के लिए GetRange अधिक कुशल होगा: https://icodeit.wordpress.com/2012/08/27/performance-of-skip-and-take-in-linq-to-objects/ , http://geekswithblogs.net/BlackRabbitCoder/archive/2012/03/29/c.net-little-wonders-skip-and-take.aspx – nawfal

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