Страницы

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

воскресенье, 2 февраля 2020 г.

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

#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



List listDB = 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ой елемент

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

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