从集合中删除集合的最佳方法是什么,但是仍然保留在单独集合中删除的项目?查找并从集合中删除项目
我写了一个扩展方法,但我认为必须有更好的方法。这里是我的功能:
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
方法在幕后,但我想更好的方法是以某种方式将项目从一个列表“转移”到另一个列表。
您的解决方案是最高效的。 – 2012-03-05 15:31:26
你的实现对我来说看起来很好。复制在.Net中是一种廉价的操作,因此没有任何“传输”的理由(除非您需要某种线程/异常安全性,否则对象一次不会超过一个集合) – adrianm 2012-03-05 15:43:46
我同意。使用内置的LINQ是让生活更轻松的目的..场景将是MS选择的最佳解决方案。因为你在C#中很好看,但VB会菊花链式查询'return = lst.FindAll(match).RemoveAll(match)'以保持与阅读代码风格的一致性。 – ppumkin 2012-03-05 16:26:10