#c_sharp #linq
Есть класс DB
class DB
{
private List newList;
public string Naimenovanie { get; set; }
public string Url { get; set; }
}
В дальнейшем я использую List listDB = new List(); чтобы в цикле вставлять
экземпляры класса DB.
Есть также отдельно список List urls = new List();
Как сравнить элементы класса listDB.Url и urls и удалить из listDB те элементы url
которых равен url списка urls
Я вижу это как создание двойного цикла и сравнение элементов. Думаю есть простое
решение через linq.
Ответы
Ответ 1
Чтобы избежать двойного цикла, я бы сложил url, которые надо удалить, в HashSet: var urlSet = new HashSet(urls); После этого вам достаточно просто listDB.RemoveAll(db => urlSet.Contains(db.Url)); Это не совсем LINQ, но, думаю, самый быстрый способ, если у вас достаточно большие списки. Если оба списка маленькие, наверное, скорее будет обойтись без вспомогательного множества: listDB.RemoveAll(db => urls.Contains(db.Url)); При этом urls.Contains пробегает цикл по списку urls (а вот urlSet.Contains даёт ответ за O(1)). Ответ 2
ListlistDB = new List () { new DB { Url = "test1" }, new DB { Url = "test2" }, new DB { Url = "test3" }, new DB { Url = "test4" }, }; List urls = new List () { "test2", "test5" }; listDB.RemoveAll(x => urls.Exists(y => y == x.Url)); из listDB удалится 2ой елемент
Комментариев нет:
Отправить комментарий