Какие параметры у меня есть, когда дело доходит до сравнения элементов в двух списках? У меня возникли некоторые проблемы с производительностью, и я хотел бы знать, если есть какие-либо более быстрые альтернативы:Увеличение производительности при сравнении двух списков
int[] foo = { 1, 2, 3, 4, 5 };
int[] bar = { 6, 7, 8, 9, 1 };
var result = foo.Any(x => bar.Contains(x));
Независимо от того, если я использую методы лямбды или использовать foreach
самостоятельно, я предполагаю, что потеря производительности будет все еще будет O(N^2)
. Могу ли я сделать что-нибудь, чтобы повлиять на это?
Разве это все равно не создало бы внутренний вложенный цикл? – Johan
'Intersect' - это заданная операция, что означает, что создание + итерация набора по одной из коллекций (при условии, что операция« Содержит »на множестве равна' 'O (1)'), будет давать 'O (N + M)' асимптотическая сложность, а не 'O (N * M)', аналогично другому ответу с использованием 'HashSet' явно. –
Я вижу. Существуют ли какие-либо другие методы лямбда, кроме пересечения, которые создают множества при сравнении коллекций? – Johan