私は2つのリストを持っています:
var list1 = new List<string> { "A", "A", "B", C" };
var list2 = new List<string> { "A", "B" };
そして、次のようなリストを作成したいと思います
var result = new[] { "A", "C" };
list1
リストが削除されたすべての要素である場合、重複を削除するlist2
ため、これには Linq 拡張メソッドはないと思います。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)