前提
- Linqは使いたくないものとします。
やりたいこと
- 対象が
{ B, C, D, E, F }
で、フィルターが{ A, B, D, E, G, H }
のとき、{ B, D, E }
を得たいです。
コード
対象のリストを書き替える場合
TargetList.RemoveAll (t => !FilterList.Contains (t));
新しいリストを返す場合
var result = TargetList.FindAll (t => FilterList.Contains (t));
ダメなやり方
この方法だと、リストを前から順にスキャンするループ中に要素が削除されてズレるので、スキャンから漏れる要素が生じます。
for (var i = 0; i < TargetList.Count; i++) {
if (!FilterList.Contains (target [i])) { TargetList.RemoveAt (i); }
}