Страницы

Поиск по вопросам

пятница, 5 апреля 2019 г.

Как сравнить класс и список

Есть класс 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


Ответ

Чтобы избежать двойного цикла, я бы сложил 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)).

Комментариев нет:

Отправить комментарий