2012-05-10 18 views
7

मेरे पास तत्वों की एक सूची नहीं है, हालांकि यदि सूची तत्वों की संख्या 4 से अधिक है तो मैं सभी तत्वों को हटाना चाहता हूं लेकिन सूची में पहले 4 को छोड़ दें।सी # - सूची - सभी तत्वों को हटाएं लेकिन पहले चार

उदाहरण:

सूची <> - 1, 2, 3, 4, 5, 6, 7, 8

नई सूची होना चाहिए - 1,2,3,4

मैं List.RemoveAll(), लेकिन यकीन नहीं क्या कोष्ठकों

कुछ मदद की प्रतीक्षा में डालने के लिए उपयोग करने में देख रहा हूँ ....

स्टीवन

+०१२३५१६४१०६१

उत्तर

15

List.RemoveRange का प्रयोग क्यों नहीं:

if (list.Count > 4) 
{ 
    list.RemoveRange(4, list.Count - 4); 
} 

(यही कारण है कि आप मौजूदा सूची उत्परिवर्तित करना चाहते संभालने है। यदि आप एक नया अनुक्रम बनाने में खुश हैं, तो मैं निश्चित रूप से ToList कॉल के साथ या उसके बिना, एडम के सुझाव के अनुसार list.Take(4) का उपयोग करता हूं। इन दिनों मैं मौजूदा संग्रह परिवर्तनशील बजाय प्रश्नों का निर्माण करते हैं)

+0

differnce कि यहाँ मूल सूची बदल गया है है ...सीधे प्रश्न का उत्तर देने के लिए – Tigran

+0

+1, लेकिन मैं आपकी क्वेरी भावना से सहमत हूं। मुझे इन दिनों कम और कम उदाहरणों में एक संख्या में एक सूची/सरणी/नया संग्रह की आवश्यकता है। –

+0

@ जोन इस विधि को स्पष्ट करने के लिए केवल पहले चार को छोड़कर सूची के तत्वों को हटा देगा। यदि ऐसा है तो यह सही है, धन्यवाद :) – swade1987

9

वैकल्पिक रूप से, आप पुराने से आइटम के साथ एक नई सूची बना सकता है:।

var firstFour = myList.Take(4).ToList(); 

यह एक नई सूची बनाता है, हालांकि, तो मूल सूची से निकालने जैसा ही है।

या अगर तुम सब करने की जरूरत है पुनरावृति उन्हें, बस TakeToList के बिना एक foreach अंदर है:

foreach (var item in myList.Take(4)) 

फिर आप आस्थगित निष्पादन हो और सूचियां बनाने के बारे स्मृति खर्च नहीं कर रहे हैं।

बस एक ओर ध्यान दें, LINQ और LINQ एक्सटेंशन के साथ के रूप में मैं कोड वाणी अपने आशय अधिक स्पष्ट रूप से: list.Take(4) एक नज़र में list.RemoveRange(4, list.Count - 4); की तुलना में बहुत आसान पढ़ता है। रखरखाव और टीमों में काम करने के लिए कोड में इरादा बहुत महत्वपूर्ण है।

0

LINQ के Take का उपयोग करें।

myList = myList.Take(4).ToList() 

यह आपकी सूची के पहले 4 आइटम लेता है और आपकी पुरानी सूची के स्थान पर एक नई सूची असाइन करता है।

अन्य उत्तरों में लंबाई की जांच करने की आवश्यकता नहीं है क्योंकि "स्रोतों को समझाएं और तत्वों को उपज दें जब तक कि गिनती तत्व उत्पन्न नहीं हो जाते हैं या स्रोत में कोई और तत्व नहीं है।" शिष्टाचार Adam Houldsworth

+0

ठीक है, यह इसे पुराने * के स्थान पर * नई * सूची में निर्दिष्ट करता है - जिसे जीसी के लिए ध्वजांकित किया जाएगा, यह मानते हुए कि यह इसका एकमात्र संदर्भ था। यह उसी सूची में कुछ भी नहीं करता है जो इसके पहले 4 आइटमों को फिर से शुरू करने से अलग करता है। –

+0

@AdamHouldsworth: धन्यवाद और सही। –

0

प्रयास करें इस

List<string> lstTest = new List<string>(); 
      lstTest.Add("test1"); 
      lstTest.Add("test2"); 
      lstTest.Add("test3"); 
      lstTest.Add("test4"); 
      lstTest.Add("test5"); 
      lstTest.Add("test6");   

      lstTest.RemoveRange(4, lstTest.Count - 4); 

      foreach (string item in lstTest) 
      { 
       Console.Write(item); 
      } 
      Console.ReadLine(); 
संबंधित मुद्दे