Каков наилучший способ удалить набор из коллекции, но сохраните элементы, которые были удалены в отдельной коллекции?
Я написал метод расширения, который делает это, но я думаю, что должен быть лучший способ. Вот моя функция:
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
, но я полагаю, что лучший способ - это как-то перевести элементы из одного списка в другой.