C# LINQ SelectMany 메서드란?
SelectMany 메서드는 중첩된 여러 컬렉션의 요소들을 마치 오류를 편집하듯 하나의 단일 컬렉션으로 병합(평탄화, flatten)할 때 사용합니다. 각 요소에 변환 함수를 적용한 뒤, 그 결과로 얻어진 여러 시퀀스를 하나의 시퀀스로 합쳐주는 역할을 합니다.
대표적인 예로, 문자열 배열의 각 문자열을 개별 문자들의 나열로 변환하는 경우를 들 수 있습니다. 먼저 다음과 같은 문자열 배열이 있다고 가정해 보겠습니다.
string[] str = { "Mobile", "Laptop", "Tablet" };이 배열에 SelectMany를 적용하면 각 문자열이 ToCharArray()를 통해 문자 배열로 변환된 후, 모든 문자들이 하나의 시퀀스로 합쳐집니다.
str.SelectMany(item => item.ToCharArray());
전체 예제 코드
using System;
using System.Linq;
using System.Collections.Generic;
public class Demo {
public static void Main() {
string[] str = { "Mobile", "Laptop", "Tablet" };
var res = str.SelectMany(item => item.ToCharArray());
Console.WriteLine("String converted to character array: ");
foreach (char letter in res) {
Console.Write(letter);
}
}
}실행 결과
String converted to character array: MobileLaptopTablet
Select와 SelectMany의 차이점
Select를 사용하면 각 문자열이 char[] 배열 그대로 매핑되어 IEnumerable<char[]> 형태의 중첩 구조가 반환됩니다. 반면 SelectMany는 이 중첩 구조를 한 단계 더 풀어서, 모든 문자를 포함하는 단일 시퀀스인 IEnumerable<char>를 반환합니다. 따라서 중첩된 컬렉션 데이터를 다룰 때는 SelectMany를 사용하는 것이 훨씬 간결하고 효율적입니다.