Найти и удалить предметы из коллекции
Каков наилучший способ удалить набор из коллекции, но при этом сохранить элементы, которые были удалены, в отдельной коллекции?
Я написал метод расширения, который делает это, но я думаю, что должен быть лучший способ. Вот моя функция:
public static List<T> FindAndRemove<T>(this List<T> lst, Predicate<T> match)
{
List<T> ret = lst.FindAll(match);
lst.RemoveAll(match);
return ret;
}
И вы бы использовали это так:
List<String> myList = new List<String>();
myList.Add("ABC");
myList.Add("DEF");
myList.Add("ABC");
List<String> removed = myList.FindAndRemove(x => x == "ABC");
// myList now contains 1 item (DEF)
// removed now contains 2 items (ABC, ABC)
Я не уверен на 100%, что происходит за кулисами вFindAll
а такжеRemoveAll
методы, но я думаю, что лучше было бы как-то «перенести» элементы из одного списка в другой.