Как ускорить проект - сравнение списков

noble

Пользователь
Регистрация
09.10.2014
Сообщения
181
Благодарностей
10
Баллы
18
Есть список А - 1000 строк и список Б 4000
Задача - взять значение из списка А и найти это значение в списке Б. На полный проход 4000 строк уходит 40 минут, подскажите как укорить проект
Проект прикрепил к сообщению
 

Вложения

noble

Пользователь
Регистрация
09.10.2014
Сообщения
181
Благодарностей
10
Баллы
18
Решение таково - загрузить в chatgpt де таблицы поставить такое задание:

Берём значение из таблицы A из столбца A и ищем такое же значение в таблице B в столбце A.
Если находится совпадение, то берём значение из таблицы B из столбца B и сохраняем его в таблице A в столбце B.
Так делаем, пока значения в столбце A таблицы A не закончатся.

Результат через 1 минуту. Не идеально примерно 100 строк пропустил но думаю что это из-за лишнего знака в таблице А или Б
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
22 344
Благодарностей
9 937
Баллы
113
Есть список А - 1000 строк и список Б 4000
Задача - взять значение из списка А и найти это значение в списке Б. На полный проход 4000 строк уходит 40 минут, подскажите как укорить проект
Проект прикрепил к сообщению
Ваш проект не смотрел, но предположу, что там просто перебор строк обоих списков и сравнение.
Чтобы выполнить поиск совпадения без перебора строк, можно второй список положить в переменную и через 'Обработка текста - Regex' искать вхождение. Вместо итераций по строкам, поиск будет в один проход, быстро.
То есть останется перебор строк только у первого списка.
 
Последнее редактирование:
  • Спасибо
Реакции: noble
Регистрация
05.06.2019
Сообщения
613
Благодарностей
500
Баллы
93
Чтобы взять значение из списка A и найти его в списке Б с помощью C#, используйте LINQ, а именно оператор Where() в сочетании с Contains() или Intersect

C#:
var listA = new List<int> { 1, 2, 3, 4, 5 };
var listB = new List<int> { 3, 4, 5, 6, 7 };

// Находим все элементы из listA, которые есть в listB
var commonElements = listA.Where(a => listB.Contains(a)).ToList();

// Или более кратко:
// var commonElements = listA.Intersect(listB).ToList(); // Использует Intersect для общих элементов
 
  • Спасибо
Реакции: noble

noble

Пользователь
Регистрация
09.10.2014
Сообщения
181
Благодарностей
10
Баллы
18
Ваш проект не смотрел, но предположу, что там просто перебор строк обоих списков и сравнение.
Чтобы выполнить поиск совпадения без перебора строк, можно второй список положить в переменную и через 'Обработка текста - Regex' искать вхождение. Вместо итераций по строкам, поиск будет в один проход, быстро.
То есть останется перебор строк только у первого списка.
Именно - перебор. Скажите плиз а как мне зафексировать номер строки чтобы выполнить следующее задание - если находится совпадение, то берём значение из таблицы B из столбца B и сохраняем его в таблице A в столбце B.
 

noble

Пользователь
Регистрация
09.10.2014
Сообщения
181
Благодарностей
10
Баллы
18
Чтобы взять значение из списка A и найти его в списке Б с помощью C#, используйте LINQ, а именно оператор Where() в сочетании с Contains() или Intersect

C#:
var listA = new List<int> { 1, 2, 3, 4, 5 };
var listB = new List<int> { 3, 4, 5, 6, 7 };

// Находим все элементы из listA, которые есть в listB
var commonElements = listA.Where(a => listB.Contains(a)).ToList();

// Или более кратко:
// var commonElements = listA.Intersect(listB).ToList(); // Использует Intersect для общих элементов
Подскажите плиз какещё одно действие добавить в срипт - если находится совпадение, то берём значение из таблицы B из столбца B и сохраняем его в таблице A в столбце B.
Так делаем, пока значения в столбце A таблицы A не закончатся. ?
 

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