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#.