次の手順 (説明が続きます) は、非常に小さなリストでは問題なく機能しますが、リストに含まれるアイテムの数が多い (1/2 百万) 場合、アプリケーションは「応答なし」状態になり、完了するまでに約 2.5 分かかります (非常に悪い)時間)。少なくとも (最終的には) 1 億項目のリストを処理する必要があるアプリケーションを追加する可能性があります。
問題のある手順のコードは次のとおりです。
public void removeItems(List<long> L, SortedList<long, List<long>> _subLists)
{
foreach (KeyValuePair<long, List<long>> kvp in _subLists)
{
foreach (long duplicate in kvp.Value)
{
int j = L.IndexOf(duplicate);
L.RemoveRange(j,(int)kvp.Key);
}
}
}
L は long 値のリストです。_subLists は、各値が L からの値のリストであるソートされたリストであり、いくつかの違いの算術級数シリーズを開始します (関係ありません)。その値に関連付けられたキーは、値に含まれる系列の長さです。
例:
L = {1,2,3,5,6,7,18,20,21} _subLists = {2,<20>} {3,<1,5>}
この手順は、単純に L から算術級数級数を削除します。