जवाबों:
List<T>
दो तरीके हैं जिनका आप उपयोग कर सकते हैं।
यदि आप आइटम का इंडेक्स जानते हैं तो RemoveAt (int index) का उपयोग किया जा सकता है। उदाहरण के लिए:
resultlist.RemoveAt(1);
या आप निकालें (टी आइटम) का उपयोग कर सकते हैं :
var itemToRemove = resultlist.Single(r => r.Id == 2);
resultList.Remove(itemToRemove);
जब आप सुनिश्चित नहीं होते हैं कि आइटम वास्तव में मौजूद है तो आप सिंगलऑर्फ़ॉल्ट का उपयोग कर सकते हैं । अगर कोई आइटम नहीं है तो SingleOrDefault
वापस आ जाएगा null
( Single
जब वह आइटम नहीं मिल सकता है तो एक अपवाद फेंक देगा)। डुप्लिकेट वैल्यू (समान के साथ दो आइटम id
) होने पर दोनों फेंक देंगे ।
var itemToRemove = resultlist.SingleOrDefault(r => r.Id == 2);
if (itemToRemove != null)
resultList.Remove(itemToRemove);
resultlist.Items.RemoveAt(1);
?
संक्षिप्त उत्तर:
निकालें (सूची से results
)
results.RemoveAll(r => r.ID == 2);
साथ आइटम को हटा देगा आईडी 2 में results
(जगह में)।
फ़िल्टर (मूल सूची से निकाले बिना results
):
var filtered = result.Where(f => f.ID != 2);
आईडी 2 के साथ वाले को छोड़कर सभी आइटम लौटाता है
विस्तृत जवाब:
मुझे लगता .RemoveAll()
है कि बहुत लचीला है, क्योंकि आपके पास आइटम आईडी की एक सूची हो सकती है जिसे आप निकालना चाहते हैं - कृपया निम्नलिखित उदाहरण के बारे में सोचें ।
यदि आपके पास है:
class myClass {
public int ID; public string FirstName; public string LastName;
}
और कुछ मान results
इस प्रकार हैं:
var results=new List<myClass> {
new myClass() { ID=1, FirstName="Bill", LastName="Smith" },
new myClass() { ID=2, FirstName="John", LastName="Wilson" },
new myClass() { ID=3, FirstName="Doug", LastName="Berg" },
new myClass() { ID=4, FirstName="Bill", LastName="Wilson" },
};
फिर आप हटाने के लिए आईडी की एक सूची परिभाषित कर सकते हैं:
var removeList = new List<int>() { 2, 3 };
और उन्हें हटाने के लिए बस इसका उपयोग करें:
results.RemoveAll(r => removeList.Any(a => a==r.ID));
यह आइटम 2 और 3 को हटा देगा और आइटम 1 और 4 को रखेगा - जैसा कि निर्दिष्ट किया गया है removeList
। ध्यान दें कि यह जगह में होता है, इसलिए किसी भी अतिरिक्त जमाव की आवश्यकता नहीं है।
बेशक, आप इसे एकल आइटम पर भी उपयोग कर सकते हैं जैसे:
results.RemoveAll(r => r.ID==4);
जहां यह हमारे उदाहरण में ID 4 के साथ बिल को हटा देगा।
DotNetField: डेमो चलाएँ
resultList = results.Where(x=>x.Id != 2).ToList();
थोड़ा लिनेक हेल्पर है जो मुझे पसंद है कि इसे लागू करना आसान है और "जहां नहीं" शर्तों के साथ प्रश्न करना आसान बना सकते हैं:
public static IEnumerable<T> ExceptWhere<T>(this IEnumerable<T> source, Predicate<T> predicate)
{
return source.Where(x=>!predicate(x));
}
//usage in above situation
resultList = results.ExceptWhere(x=>x.Id == 2).ToList();
List.FindIndex
/ List.RemoteAt
(जिसमें "म्यूट" है या "म्यूटिंग ऑपरेशन होने की" इतनी अच्छी "सुविधा नहीं है")।
एक और दृष्टिकोण है। यह उपयोग करता है List.FindIndex
और List.RemoveAt
।
जब मैं होता शायद समाधान Keiths द्वारा प्रस्तुत (सिर्फ सरल का उपयोग Where
/ ToList
कि यह में) इस दृष्टिकोण अलग है mutates मूल सूची वस्तु। यह उम्मीदों के आधार पर एक अच्छा (या बुरा) "फीचर" हो सकता है।
किसी भी मामले में, FindIndex
(गार्ड के साथ युग्मित) यह सुनिश्चित करता RemoveAt
है कि आईडी में अंतराल हैं या ऑर्डर गलत है, आदि के कारण वसीयत सही है, और सूची के माध्यम से RemoveAt
(बनाम Remove
) एक दूसरे ओ (एन) खोज से बचा जाता है ।
यहाँ एक LINQPad स्निपेट है:
var list = new List<int> { 1, 3, 2 };
var index = list.FindIndex(i => i == 2); // like Where/Single
if (index >= 0) { // ensure item found
list.RemoveAt(index);
}
list.Dump(); // results -> 1, 3
खुश कोडिंग।
अधिक सरलीकृत:
resultList.Remove(resultList.Single(x => x.Id == 2));
कोई नई var ऑब्जेक्ट बनाने की कोई आवश्यकता नहीं है।
{
class Program
{
public static List<Product> list;
static void Main(string[] args)
{
list = new List<Product>() { new Product() { ProductId=1, Name="Nike 12N0",Brand="Nike",Price=12000,Quantity=50},
new Product() { ProductId =2, Name = "Puma 560K", Brand = "Puma", Price = 120000, Quantity = 55 },
new Product() { ProductId=3, Name="WoodLand V2",Brand="WoodLand",Price=21020,Quantity=25},
new Product() { ProductId=4, Name="Adidas S52",Brand="Adidas",Price=20000,Quantity=35},
new Product() { ProductId=5, Name="Rebook SPEED2O",Brand="Rebook",Price=1200,Quantity=15}};
Console.WriteLine("Enter ProductID to remove");
int uno = Convert.ToInt32(Console.ReadLine());
var itemToRemove = list.Find(r => r.ProductId == uno);
if (itemToRemove != null)
list.Remove(itemToRemove);
Console.WriteLine($"{itemToRemove.ProductId}{itemToRemove.Name}{itemToRemove.Brand}{itemToRemove.Price}{ itemToRemove.Quantity}");
Console.WriteLine("------------sucessfully Removed---------------");
var query2 = from x in list select x;
foreach (var item in query2)
{
/*Console.WriteLine(item.ProductId+" "+item.Name+" "+item.Brand+" "+item.Price+" "+item.Quantity );*/
Console.WriteLine($"{item.ProductId}{item.Name}{item.Brand}{item.Price}{ item.Quantity}");
}
}
}
}
var itemsToRemove = resultlist.Where(r => r.Id == 2); foreach (var itemToRemove in ItemsToRemove) resultList.Remove(itemToRemove);