從集合中刪除集合的最佳方法是什麼,但是仍然保留在單獨集合中刪除的項目?查找並從集合中刪除項目
我寫了一個擴展方法,但我認爲必須有更好的方法。這裏是我的功能:
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