C # / Linq : IEnumerable의 각 요소에 매핑 함수를 적용 하시겠습니까?


107

IEnumerable의 각 요소를 매핑 함수 (Linq 호환 방식)를 사용하여 다른 것으로 변환하는 방법을 찾고 있었지만 아무것도 찾지 못했습니다.

(매우 간단한) 예의 경우 다음과 같이 할 수 있어야합니다.

IEnumerable<int> integers = new List<int>() { 1, 2, 3, 4, 5 };
IEnumerable<string> strings = integers.Transform(i => i.ToString());

하지만 아무것도 찾지 못했습니다. 즉,이를 수행하는 확장 메서드를 작성하는 것은 매우 간단합니다 (기본적으로 필요한 것은 소스 열거자를 새 클래스로 래핑 한 다음 호출을 위임하기위한 상용구 코드를 작성하는 것입니다). 이것은 상당히 기본적인 작업이고, 직접 작성하는 것은 바퀴를 재발 명하는 것과 같은 느낌입니다. 내가 사용해야하는 내장 된 방법이있을 수 있다는 느낌을 떨칠 수 없으며, 너무 눈이 멀어서 볼 수 없었습니다. 그것.

그래서 ... Linq에 내가 위에서 설명한 것을 할 수있는 것이 있습니까?


답변:


172

Select()확장 방법을 사용할 수 있습니다 .

IEnumerable<int> integers = new List<int>() { 1, 2, 3, 4, 5 };
IEnumerable<string> strings = integers.Select(i => i.ToString());

또는 LINQ 구문에서 :

IEnumerable<int> integers = new List<int>() { 1, 2, 3, 4, 5 };

var strings = from i in integers
              select i.ToString();

4
아! 나는 방법이 있어야한다는 것을 알고 있었다. 약간의 오래된 "숲 / 나무 시각적 폐색 문제"라고 생각합니다. :)
— Andreas Baus 2011 년

2
맵에 부작용이있는 경우에는의 본문이 Select()열거 될 때까지 반드시 실행되지 않으므로 문제가 발생할 수 있습니다 . 그렇게하는 것이 좋은 생각은 아니지만 ToList()전체 목록을 평가하기 위해 추가해야하는 상황이있을 수 있습니다 .
— Dave Nichol

6
한 형식 'linq 쿼리 구문'과 다른 형식 'linq 메서드 구문'을 호출하는 것이 더 정확하지 않습니까?
— Ryan Harmuth

2
실제로 둘 다 Linq 구문 유형이며 첫 번째는 Method 구문이고 두 번째는 Query 구문입니다. 자세히보기 : docs.microsoft.com/en-us/dotnet/csharp/programming-guide/…
— Machado

27

Select입력 시퀀스를 변환 / 투영하는 데 사용할 수있는 것을 찾고 있습니다.

IEnumerable<string> strings = integers.Select(i => i.ToString());

9
공정하게 (용어의 후자 세트가 일반적인 용어이다) SQL에 맞게 해야하는
— éclairevoyant

5
꽤 성가신 일입니다. 함수형 프로그래밍을 배우려고하지만 10 년 동안 LINQ 용어를 배워야합니다. 번역 가이드가 필요합니다. 나는 ... 도울 수있는 구글의 궁금
— 데미안 소여
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.