Работа со списками

Scorpio2011

Client
Регистрация
07.02.2015
Сообщения
104
Благодарностей
18
Баллы
18
Ребята подскажите как можно ускорить процесс?

Есть в общем 2 списка в каждом по несколько миллионов записей, нужно сравнить оба списка и удалить в одном из них повторяющиеся строки из другого списка. Наглядно все выглядит так:

Список 1: а,б,в,г,д,е,ё,ж,з и тд
Список 2: а,б,7,г,д,ф,ё,ж,з и тд

Нужно вычленить сравнить значения из списка 2 со списком 1 и все строки что не нашел записать в отдельный новый список.

Я уже пользуюсь вот таким скриптом:

Код:
// берем из переменной текст, который надо искать
var textContains = project.Variables["listSearchTextContains"].Value;
// получаем список, в котором будем искать
var sourceList = project.Lists["result"];
// ищем в каждой строчке в списке
lock(SyncObjects.ListSyncer)
{
    for(int i=0; i < sourceList.Count; i++)
    {
        // читаем строку из списка
        var str = sourceList[i];
        // проверяем содержание текста в строке, если есть совпадение возвращаем "yes"
        if (str.Contains(textContains))
            return "yes";
    }
}
// если ничего не нашли возвращаем "no"
return "no";
Естественно переменную listSearchTextContains беру из списка 2 и сравниваю с строками списка result и выдает yes или no в случает если находит или не находит совпадение, ну а потом с помощью if уже работаю дальше. Все бы ничего сам скрипт работает нормально, но для небольших списков где то до 20к строк, если же оба списка будут по 100к строк, а я уже не говорю о миллионах все это затягивается на очень большое время и приходится оба списка дробить на мелкие чтобы хоть как то ускорить процесс. Но это тоже накладно когда у меня списки по несколько миллионов строк из них каждый раз нужно вычленять всего по 50к строк. Если какой нибудь способ ускорить процесс?

Есть идея в объединение двух списков и удалении в них двух повторяющихся строках, наподобие экшена удалить дубли, только тут надо удалить не только дубль но и саму строку дублируемую.
 
Последнее редактирование:

Scorpio2011

Client
Регистрация
07.02.2015
Сообщения
104
Благодарностей
18
Баллы
18
Апну.. может кто нить все таки поможет
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
вы в PM гоняете или ZP?
 

surr

Новичок
Регистрация
09.10.2014
Сообщения
15
Благодарностей
14
Баллы
3
Можно отсортировать списки перед сравнением, поможет выиграть немного времени. Но вообще как вы уже сами убедились сравнивать списки-миллионники путём прямого сравнения строк очень нерационально. Надо сравнивать хеши. Читайте спеки по классу HashSet, этот способ памятезатратный, но должен минимум на порядок сократить время перебора.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)