В чем разница между Select и SelectMany в linq

Приветствую всех! Кода вы начинаете разбираться в LINQ часто задаетесь вопросами в чем разница между Select и SelectMany. Эти вопросы возникают не только у одного из вас, а у многих. Поэтому я их хочу помочь вам разобраться в этом вопросе.

Select — Создает проекцию части последовательности.
SelectMany — Создает проекцию части последовательности по принципу «один ко многим».

Операция SelectMany объединяет подпоследовательности в единую выходную последовательность. Вспомните, что для каждого входного элемента операция Select выдает в точ­ности один выходной элемент, вошел один и вышел один. В противоположность этому SelectMany который выдает один элемент ко многим, то есть вошел один элемент вышло много либо ноль. В  SelectMany элементы берутся из подпоследовательности или дочерней последовательности, которую должно выдавать лямбда-выражение.

Посмотрим что находиться внутри SelectMany:

public static IEnumerable<S> SelectMany<T, S>( 
          this IEnumerable<T> source, 
          Func<T, IEnumerable<S>> selector);

Получаем входную последовательность элементов типа T и делегат метода-селектора, а возвращает объект, который при перечислении проходит по входной последовательности, получая каждый элемент индивидуально из входной последовательности и передавая его в метод-селектор. Последний затем возвращает объект, который во время перечисления выдает ноль или более элементов типа S в промежуточную выходную последовательность. Операция SelectMany вернет конкатенированную выходную последовательность при каждом вызове метода-селектора.

string[] words = {"ab", "4пвап54и", "c", "de"};
var letters = words.SelectMany(w => w); 

foreach(var t in letters)
	{
		Console.WriteLine(t);
	}

//a b 4 п в а п 5 4 и с d e

Таким образом мы получаем из string [] массива строк char [] массив символов.

 

Обновлено: 19.01.2018 — 10:37

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.