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.