Следующая процедура (пояснение приведено ниже) отлично работает для действительно небольших списков, но когда список содержит большее количество элементов (1/2 миллиона), приложение переходит в состояние «не отвечает», и для его завершения требуется около 2,5 минут (очень плохое время).
Я мог бы добавить, что приложение должно обрабатывать списки из 100 миллионов элементов
по крайней мере (в конце концов).
вот код для проблемной процедуры:
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 - список длинных значений.
_subLists представляет собой отсортированный список, где каждое значение представляет собой список
значения от L, начиная ряд арифметической прогрессии некоторой разницы (не имеет значения).
ключ, связанный с этим значением, является длиной ряда, который содержат значения.
Пример:
L = {1,2,3,5,6,7,18,20,21}
_subLists = {2, <20>}
{3, <1,5>}
Процедура просто удаляет ряд арифметической прогрессии из L.