Ho due liste:Differenza tra due liste preservare duplicati
var list1 = new List<string> { "A", "A", "B", C" };
var list2 = new List<string> { "A", "B" };
e desidero produrre un elenco come
var result = new[] { "A", "C" };
Se l'elenco è tutti gli elementi da list1
rimossi da list2
I non pensare che ci sia un metodo di estensione Linq per questo dal Except
rimuove i duplicati.
Il modo non LINQ per fare questo sarebbe:
var tempList = list1.ToList();
foreach(var item in list2)
{
tempList.Remove(item);
}
ma mi chiedo se c'è un metodo di estensione LINQ che avrei potuto perdere.
Edit:
Poiché ci probabilmente non sono affatto ecco un metodo di estensione che ho fatto.
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;
}
}
Usage:
list1.RemoveRange(list2)
Gli elenchi sono di dimensioni arbitrarie, quindi uno potrebbe essere più grande. – Romoku
Non ci sono ipotesi fatte qui sulle dimensioni relative degli elenchi. – Ani
Oh, suppongo che ho scambiato il significato di "tutti gli elementi di list2 rimossi dalla lista1" – Romoku