본문 바로가기

C# 문법

[C#] Enumerable.Zip, Linq에서 Zip을 이용하여 결합하기

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. 어떻게 이별까지 사랑하겠어 널 사랑한 거지