コレクションからセットを削除するにはどうすればよいですが、削除されたアイテムは別のコレクションに残しておきますか?コレクションからアイテムを検索して削除する
私はこれを行う拡張メソッドを書いていますが、もっと良い方法があるはずです。ここに私の関数である。
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)
私はFindAll
とRemoveAll
方法で舞台裏で何が100%わからないんだけど、私は想像しますより良い方法は、何らかの形で項目をあるリストから他のリストに「移す」ことです。
あなたの解決策が最も効率的です。 –
あなたの実装はうまくいくようです。コピーは.Netの安い操作なので、 "転送"の理由はありません(オブジェクトが一度に複数のコレクションに決して存在しないスレッド/例外の安全性を必要としない限り)。 – adrianm
私は同意します。組み込みのLINQを使用することは、人生を楽にする目的です。シーンがMSによって選択された最良のソリューションになるということを考えています。あなたはC#で目には問題はないが、VBでは、コードスタイルを読むこととインラインで一致するように、クエリ 'return = lst.FindAll(match).RemoveAll(match)'をデイジーチェーンします。 – ppumkin