Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# LINQ SelectMany 메서드 – 여러 컬렉션을 하나의 시퀀스로 평탄화하기

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를 사용하는 것이 훨씬 간결하고 효율적입니다.