Использование оператора SelectMany в C#
Метод `SelectMany` в C# используется для проецирования и объединения элементов последовательности в одну последовательность. Этот метод принимает два аргумента: селектор элементов и селектор коллекций.
Ниже приведены примеры использования метода `SelectMany` с различными аргументами:
Пример 1: Проецирование и объединение элементов в одну коллекцию
csharp
int[] numbers = { 1, 2, 3, 4, 5 };
var result = numbers.SelectMany(n => Enumerable.Range(1, n));
// Выводит все числа от 1 до 5, каждое число повторяется столько раз, сколько оно само
foreach (var item in result)
{
Console.WriteLine(item);
}
// Результат: 1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4, 5
В этом примере метод `SelectMany` принимает лямбда-выражение `n => Enumerable.Range(1, n)` в качестве селектора коллекций. Он возвращает коллекцию чисел от 1 до `n` для каждого элемента `n` из исходного массива `numbers`. Полученная коллекция объединяется в одну последовательность.
Пример 2: Проецирование элементов и выбор отдельных свойств
csharp
class Person
{
public string Name { get; set; }
public List Hobbies { get; set; }
}
List people = new List
{
new Person { Name = "John", Hobbies = new List { "Golf", "Tennis" } },
new Person { Name = "Jane", Hobbies = new List { "Skiing", "Swimming" } }
};
var hobbies = people.SelectMany(p => p.Hobbies);
// Выводит все хобби каждого человека
foreach (var hobby in hobbies)
{
Console.WriteLine(hobby);
}
// Результат: Golf, Tennis, Skiing, Swimming
В этом примере `SelectMany` используется для объединения свойства `Hobbies` каждого объекта `Person` в одну коллекцию. Полученная коллекция содержит все хобби каждого человека.
Таким образом, метод `SelectMany` в C# позволяет проецировать и объединять элементы из различных коллекций в одну последовательность, что обеспечивает гибкость и удобство при работе с данными.