#c_sharp #linq
Есть класс DB class DB { private ListnewList; 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ой елемент
Комментариев нет:
Отправить комментарий