- Регистрация
- 07.02.2015
- Сообщения
- 104
- Благодарностей
- 19
- Баллы
- 18
Ребята подскажите как можно ускорить процесс?
Есть в общем 2 списка в каждом по несколько миллионов записей, нужно сравнить оба списка и удалить в одном из них повторяющиеся строки из другого списка. Наглядно все выглядит так:
Список 1: а,б,в,г,д,е,ё,ж,з и тд
Список 2: а,б,7,г,д,ф,ё,ж,з и тд
Нужно вычленить сравнить значения из списка 2 со списком 1 и все строки что не нашел записать в отдельный новый список.
Я уже пользуюсь вот таким скриптом:
Естественно переменную listSearchTextContains беру из списка 2 и сравниваю с строками списка result и выдает yes или no в случает если находит или не находит совпадение, ну а потом с помощью if уже работаю дальше. Все бы ничего сам скрипт работает нормально, но для небольших списков где то до 20к строк, если же оба списка будут по 100к строк, а я уже не говорю о миллионах все это затягивается на очень большое время и приходится оба списка дробить на мелкие чтобы хоть как то ускорить процесс. Но это тоже накладно когда у меня списки по несколько миллионов строк из них каждый раз нужно вычленять всего по 50к строк. Если какой нибудь способ ускорить процесс?
Есть идея в объединение двух списков и удалении в них двух повторяющихся строках, наподобие экшена удалить дубли, только тут надо удалить не только дубль но и саму строку дублируемую.
Есть в общем 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";
Есть идея в объединение двух списков и удалении в них двух повторяющихся строках, наподобие экшена удалить дубли, только тут надо удалить не только дубль но и саму строку дублируемую.
Последнее редактирование: