Объясню это на примере.Оптимизированный способ выбора элементов из коллекции, исключая список определенных элементов, используя Linq
Пусть У меня есть список Студенческого объекта, где студент класс,
class Student
{
public int RollNo {get; set;}
public string Name { get; set; }
public int StateId { get; set; }
}
и список, содержащие специальные StateIds
List<int> specialStateIds;
Теперь я хочу, чтобы извлечь Список RollIds из списка студентов, которые не принадлежит специальным государствам. В настоящее время я делаю это следующим образом.
List<int> NonSpacialRollIds = Students.Where(s =>
!specialStateIds.Contains(s.StateId)).Select(s => s.RoleIds).ToList();
Но почему-то я чувствую, может быть оптимизировать дальнейшее использование Linq и содержит метод расширения коллекций можно избежать.
Если 'specialStateIds' уже отсортирован, и «Студенты» сортируются по «StateId», тогда некоторый код не Linq может сделать это эффективно, но если они не отсортированы, то ответ Сергея будет правильным. – Dialecticus
@ Dialecticus: содержит ли «Содержит» двоичный поиск внутри? любая альтернатива «Содержит»? – kushdilip
'HashSet.Contains' выполняет некоторые вычисления. Объяснение не может быть простым и всеобъемлющим. Начните с [wikipedia] (http://en.wikipedia.org/wiki/Hash_table). Вы платите больше времени при создании 'HashSet', но вы получаете время при его использовании. – Dialecticus