Enumberable.Zip에 관한 MSDN의 설명을 보겠습니다.
- Zip<TFirst,TSecond,TResult>(IEnumerable, IEnumerable, Func<TFirst,TSecond,TResult>)
- TFirst (첫 번째 결합 대상), TSecond(두 번째 결하 대상)
- Func< TFirst, TSecond, TResult > (결합된 결과를 특정 형식으로 저장한다.)
- Zip의 경우 두 결합대상의 시퀀스 요소만큼 결합을 합니다.
Enumerable.Zip 활용법
public void Run()
{
//numRange의 10개의 값을 가지고 있고
var numRange = Enumerable.Range(1, 10);
//strArray는 4개의 값을 가지고 있습니다.
var strArray = new string[] { "그 남자 그 여자", "오르막길", "엄마의 꿈", "어떻게 이별까지 사랑하겠어 널 사랑한 거지" };
Console.WriteLine($"양뱅이의 오늘의 플레이 List");
//두 결합 대상의 시퀀스만큼만 결합하니까 결과 값은 4개만 나오게 됩니다!
// TFrist -> strArray, TSecond -> numRange
// Func<TFirst(str), TSecond(num), TRsult(string)> => $"{num}. {str}"
//정석 사용법
Func<string, int, string> result = (str, num) => $"{num}. {str}";
var tmpResult = Enumerable.Zip(strArray, numRange, result);
tmpResult.AsParallel()
.ForAll(f => Console.WriteLine(f));
//응용 사용법
strArray.Zip(numRange, (str, num) => $"{num}. {str}")
.AsParallel()
.ForAll(f =>
{
Console.WriteLine(f);
});
}
결과
양뱅이의 오늘의 플레이 List
1. 그 남자 그 여자
2. 오르막길
3. 엄마의 꿈
4. 어떻게 이별까지 사랑하겠어 널 사랑한 거지