मैं दो सूचियों है:अंतर डुप्लिकेट संरक्षण
var list1 = new List<string> { "A", "A", "B", C" };
var list2 = new List<string> { "A", "B" };
और मैं की तरह
var result = new[] { "A", "C" };
एक सूची तैयार करना चाहते हैं कहाँ सूची list1
से सभी तत्वों list2
मैं से हटा दिया है ऐसा नहीं लगता कि Except
डुप्लिकेट को हटा देता है, इसके लिए एक लिंक एक्सटेंशन विधि है।
गैर LINQ तरीका यह हो सकता है ऐसा करने के लिए:
var tempList = list1.ToList();
foreach(var item in list2)
{
tempList.Remove(item);
}
लेकिन अगर वहाँ एक Linq विस्तार विधि है कि मैं याद किया हो सकता है है मैं सोच रहा हूँ।
संपादित करें:
के बाद से वहाँ शायद नहीं कर रहे हैं किसी भी यहां एक विस्तार विधि मैंने बनाया है।
public static class LinqExtensions
{
public static IEnumerable<T> RemoveRange<T>(this IEnumerable<T> source, IEnumerable<T> second)
{
var tempList = source.ToList();
foreach(var item in second)
{
tempList.Remove(item);
}
return tempList;
}
public static IEnumerable<TFirst> RemoveMany<TFirst, TSecond>(this IEnumerable<TFirst> source, IEnumerable<TSecond> second, Func<TSecond, IEnumerable<TFirst>> selector)
{
var tempList = source.ToList();
foreach(var item in second.SelectMany(selector))
{
tempList.Remove(item);
}
return tempList;
}
}
उपयोग:
list1.RemoveRange(list2)
सूचियां मनमाने ढंग से आकार में हैं, इसलिए कोई भी बड़ा हो सकता है। – Romoku
सूचियों के सापेक्ष आकारों के बारे में यहां कोई धारणा नहीं है। – Ani
ओह मुझे लगता है कि मैंने आपको "सूची 2 से हटाए गए सूची 2 के सभी तत्वों" से चिह्नित किया है, – Romoku