Лучший способ сравнить два больших строковых списка, используя С# и LINQ?
У меня есть большой список (~ 110 000 строк), который мне нужно сравнить с похожим размером.
Список A поступает из одной системы.
Список B поступает из таблицы SQL (я могу читать, не хранить procs и т.д.)
Каков наилучший способ найти значения в списке A, которые больше не существуют в списке B?
Сколько 100 000 строк обрабатывается в массиве?
спасибо
Ответы
Ответ 1
Итак, у вас есть два списка:
List<string> listA;
List<string> listB;
Затем используйте Enumerable.Except
:
List<string> except = listA.Except(listB).ToList();
Обратите внимание, что если вы хотите, скажем, игнорировать случай:
List<string> except = listA.Except(listB, StringComparer.OrdinalIgnoreCase).ToList();
Вы можете заменить последний параметр IEqualityComparer<string>
по вашему выбору.
Ответ 2
С LINQ:
var missing = listA.Except(listB).ToList();
Ответ 3
Из интереса вы можете использовать List<string>
? Поскольку в .net 3.5 SP1 вы можете использовать HashSet, а ExceptWith. Насколько я понимаю, HashSets специально оптимизированы для сравнения между двумя наборами.
Ответ 4
List<string> A = //get from file
List<string> B = //get from db
var C = A.Except(B);
Ответ 5
Устранив этот вопрос, похоже, вы могли бы использовать метод Except<T>()
.