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

  • Автор темы Автор темы noble
  • Дата начала Дата начала

noble

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

Вложения

Решение таково - загрузить в chatgpt де таблицы поставить такое задание:

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

Результат через 1 минуту. Не идеально примерно 100 строк пропустил но думаю что это из-за лишнего знака в таблице А или Б
 
Есть список А - 1000 строк и список Б 4000
Задача - взять значение из списка А и найти это значение в списке Б. На полный проход 4000 строк уходит 40 минут, подскажите как укорить проект
Проект прикрепил к сообщению
Ваш проект не смотрел, но предположу, что там просто перебор строк обоих списков и сравнение.
Чтобы выполнить поиск совпадения без перебора строк, можно второй список положить в переменную и через 'Обработка текста - Regex' искать вхождение. Вместо итераций по строкам, поиск будет в один проход, быстро.
То есть останется перебор строк только у первого списка.
 
Последнее редактирование:
  • Спасибо
Реакции: noble
Чтобы взять значение из списка 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
Ваш проект не смотрел, но предположу, что там просто перебор строк обоих списков и сравнение.
Чтобы выполнить поиск совпадения без перебора строк, можно второй список положить в переменную и через 'Обработка текста - Regex' искать вхождение. Вместо итераций по строкам, поиск будет в один проход, быстро.
То есть останется перебор строк только у первого списка.

Именно - перебор. Скажите плиз а как мне зафексировать номер строки чтобы выполнить следующее задание - если находится совпадение, то берём значение из таблицы B из столбца B и сохраняем его в таблице A в столбце B.
 
Чтобы взять значение из списка 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 не закончатся. ?
 

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