LINQ (Language Integrated Query) — мощный инструмент C#, который позволяет разработчикам запрашивать данные и манипулировать ими. При работе с коллекциями часто необходимо выбрать отдельные объекты, то есть уникальные значения, для дальнейшего анализа или обработки. В этой статье блога мы рассмотрим несколько методов достижения этой цели с помощью LINQ, сопровождаемые разговорными объяснениями и примерами кода.
Метод 1: использование метода Distinct
var distinctSubjects = subjects.Distinct();
Этот метод возвращает новую коллекцию, содержащую только отдельные предметы из исходной коллекции. Он сравнивает элементы на основе их средства сравнения равенства по умолчанию.
Метод 2: использование метода GroupBy
var distinctSubjects = subjects.GroupBy(s => s).Select(g => g.Key);
Этот метод группирует субъекты по их значениям, а затем выбирает ключ каждой группы, который представляет отдельный субъект.
Метод 3: использование класса HashSet
var distinctSubjects = new HashSet<string>(subjects);
При использовании HashSetдубликаты автоматически удаляются, и в результирующей коллекции остаются только отдельные темы.
Метод 4. Использование метода расширения Enumerable.DistinctBy(если доступен)
var distinctSubjects = subjects.DistinctBy(s => s);
Этот метод недоступен в стандартной библиотеке LINQ, но его можно включить с помощью сторонней библиотеки, например MoreLINQ. Он позволяет вам указать функцию селектора клавиш для определения различимости.
Метод 5: использование метода ToLookup
var distinctSubjects = subjects.ToLookup(s => s).Select(g => g.Key);
Этот метод создает таблицу поиска, ключами которой являются отдельные субъекты. Выбирая ключи из таблицы поиска, мы получаем коллекцию различных предметов.
В этой статье мы рассмотрели различные методы выбора отдельных тем с помощью LINQ. Предпочитаете ли вы простоту метода Distinctили гибкость пользовательских клавишных селекторов, LINQ предоставляет несколько вариантов для различных сценариев. Освоив эти методы, вы сможете эффективно извлекать уникальные значения из коллекций в своих приложениях C#.