C# LINQ Select 메서드란?
C#의 Select 메서드는 배열이나 컬렉션에 담긴 각 요소를 원하는 형태로 변환(투영)할 때 사용하는 대표적인 LINQ 연산자입니다. 원본 데이터는 그대로 유지하면서, 각 요소에 원하는 가공을 적용한 새로운 시퀀스를 생성해 줍니다.
예제에 사용할 문자열 배열
다음과 같이 문구류 이름을 담은 문자열 배열이 있다고 가정해 보겠습니다.
string[] stationery = { "diary", "board", "pencil", "whiteboard" };람다 식을 활용한 Select 메서드 예제
Select 메서드는 아래 코드처럼 람다 식(Lambda Expression)을 인자로 받아 사용하며, 요소 값뿐 아니라 해당 요소의 인덱스도 함께 전달받을 수 있습니다. 이 예제에서는 요소(item)와 인덱스(index)를 이용해 Substring으로 문자열 일부를 잘라낸 새 익명 객체를 생성합니다.
예제 코드
using System;
using System.Linq;
using System.Collections.Generic;
public class Demo {
public static void Main() {
string[] stationery = { "diary", "board", "pencil", "whiteboard" };
var res = stationery.AsQueryable().Select((item, index) => new { result = item.Substring(0, index + 4) });
foreach (var str in res) {
Console.WriteLine("{0}", str);
}
}
}
실행 결과
{ result = diar }
{ result = board }
{ result = pencil }
{ result = whitebo }코드 동작 방식
(item, index) 형태의 람다 식을 사용하면 각 요소와 함께 해당 요소의 인덱스도 전달받을 수 있습니다. 인덱스는 0부터 시작하므로 index + 4개만큼의 문자를 잘라내며, 결과는 다음과 같습니다.
- "diary"(인덱스 0) → 앞에서 4글자 → "diar"
- "board"(인덱스 1) → 앞에서 5글자 → "board"
- "pencil"(인덱스 2) → 앞에서 6글자 → "pencil"
- "whiteboard"(인덱스 3) → 앞에서 7글자 → "whitebo"
이처럼 Select 메서드를 활용하면 별도의 반복문 없이도 컬렉션의 모든 요소를 간결하고 직관적으로 변환할 수 있습니다.