- Регистрация
- 22.03.2012
- Сообщения
- 2 406
- Благодарностей
- 1 473
- Баллы
- 113
Дано таблицу и список.
Таблица 15х4000( 15 столбцов и 4000 строк). В 11 столбце идут интересующие нас IDшники.
Список — ~3000 IDшников.
Нужно удалить с таблицы те строки, которые имеют в 11 столбце такие же ID.
"Сочинил" такое
По сути сравниваем два списка простым перебором. Куда уж проще.
В таком варианте проверка и удаление занимает минут 20.
Понятно, что 4000*3000= 12 млн операций ( ну ладно, проходит только половина) должно занимать время.
Помню, тут были похожие темы, и там был преложен вариант, который ни какие-то абсурдные 4 к и 3 к сравнивает, а миллионы строк за несколько секунд.
Но никак не могу найти...
Или мне просто приснилось то решение? =)
Есть идеи, как ускорить процесс?
АП
Только что понял, что для ускорения, нужно и найденную строку из списка удалять, чтоб потом ее опять не проверять с другими строками. Думаю, скорости прибавит, но не сильно
Таблица 15х4000( 15 столбцов и 4000 строк). В 11 столбце идут интересующие нас IDшники.
Список — ~3000 IDшников.
Нужно удалить с таблицы те строки, которые имеют в 11 столбце такие же ID.
"Сочинил" такое
C#:
int k = project.Tables["Error"].RowCount;
for (int i = k; i > 0; i--)
{
var m=i-1; //Т.к. количество строк на 1 больше чем порядковый номер последней строки
var colums = new List<string>(project.Tables["Error"].GetRow(m));
for(int j =0; j< project.Lists["ID"].Count; j++)
{
if (colums[10] == project.Lists["ID"][j])
{
project.Tables["Error"].DeleteRow(m);
}
}
}
В таком варианте проверка и удаление занимает минут 20.
Понятно, что 4000*3000= 12 млн операций ( ну ладно, проходит только половина) должно занимать время.
Помню, тут были похожие темы, и там был преложен вариант, который ни какие-то абсурдные 4 к и 3 к сравнивает, а миллионы строк за несколько секунд.
Но никак не могу найти...
Или мне просто приснилось то решение? =)
Есть идеи, как ускорить процесс?
АП
Только что понял, что для ускорения, нужно и найденную строку из списка удалять, чтоб потом ее опять не проверять с другими строками. Думаю, скорости прибавит, но не сильно
Последнее редактирование: