2012-07-19 3 views
8

क्या यह संभव है?सूची <Item> सूची का एक हिस्सा शुरू और अंत सूचकांक

उदाहरण के लिए, अगर मैं

List<Item> myList = new List<Item>; 

//added 100 of Items to myList 

//then I want to grab items at indices 50 - 60 

List<Item> myNewList = myList.? 

है मैं कैसे हैं कि डब्ल्यू/MyList के माध्यम से पाशन ओ? धन्यवाद।

उत्तर

21

एक ऐसी विधि है जो इन वस्तुओं को पुनर्प्राप्त करती है, List.GetRange। http://msdn.microsoft.com/en-us/library/21k0e39c.aspx

List<Item> myList = new List<Item>; 
myList.GetRange(50, 10); // Retrieves 10 items starting with index #50 
+1

शायद ओपी 11 आइटम चाहता है;) –

+0

दयालुता यह 'IList' और 'IReadOnlyList' के लिए उपलब्ध नहीं है। – Arek

3
var myNewList = myList.Skip(50).Take(10); 
+0

बहुत साफ समाधान। –

+0

"छोड़ें" और "टेक" के लिए प्रलेखन के माध्यम से पढ़ना, ऐसा प्रतीत होता है कि वे अंतर्निहित IENumerable तर्क का उपयोग करते हैं। क्या इसका मतलब है कि प्रदर्शन ओ है (छोड़े गए आइटमों की संख्या)? यानी 50 छोड़ने से 100 धीमी गति से छोड़ रहा है? –

+1

@TedSpence हाँ यह होना चाहिए। निश्चित नहीं है कि विशिष्ट अनुकूलन निष्पादित किए गए हैं, जैसे जांच करना कि अंतर्निहित IENumerable IList है और इसी तरह। इन लिंक से ऐसा नहीं दिखता है जो सूची कहते हैं। बड़े संग्रह के लिए गेट्रेंज अधिक कुशल होगा: 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

0

के बारे में क्या:

 List<string> myList = new List<string>(); 

     //added 100 of Items to myList 
     for (int i=0; i<100; ++i) 
     { 
      myList.Add("blablabla"); 
     } 

     //then I want to grab items at indices 50 - 60 
     // Note: 50 - 60 inclusivly are actually 11 items 
     List<string> myNewList = myList.GetRange(50, 11);