본문 바로가기
프로그래밍/C# LINQ

C# LINQ - Enumerable.Zip()

by bantomak 2024. 3. 5.
반응형

Enumerable.Zip<TFirst, TSecond, TResult>(IEnumerable<TFirst>, IEnumerable<TSecond>, Func<TFirst, TSecond, TResult>) 메서드

public static System.Collections.Generic.IEnumerable<TResult> Zip<TFirst,TSecond,TResult> (this
System.Collections.Generic.IEnumerable<TFirst> first, System.Collections.Generic.IEnumerable<TSecond> second, Func<TFirst,TSecond,TResult> resultSelector);

 

매개변수

first IEnumerable<TFirst>

병합할 첫 번째 시퀀스

 

second IEnumerable<TSecond>

병합할 두 번째 시퀀스

 

resultSelector Func<TFirst, TSecond, TResult>

두 시퀀스의 요소를 병합하는 방법을 지정하는 함수

 

반환

IEnumerable<TResult>

두 입력 시퀀스의 병합된 요소가 들어있는 IEnumerable<T>

 

예제 코드

int[] numbers = { 1, 2, 3, 4 };
string[] words = { "one", "two", "three" };

var numbersAndWords = numbers.Zip(words, (first, second) => first + " " + second);

foreach (var item in numbersAndWords)
    Console.WriteLine(item);

// This code produces the following output:

// 1 one
// 2 two
// 3 three

 

첫번째 시퀀스의 각 요소를 두 번째 시퀀스에서 동일한 인덱스가 있는 요소와 병합한다. 시퀀스에 동일할 수의 요소가 없는 경우 메서드는 시퀀스가 해당 요소 중 하나의 끝에 도달할 때까지 시퀀스를 병합한다. 예를 들어 한 시퀀스에 3개의 요소가 있고 다른 시퀀스에 4개의 요소가 있는 경우 결과 시퀀스에는 3개의 요소만 들어간다.

 

즉, Enumerable.Zip은 가로 데이터들의 나열을 세로 데이터의 쌍으로 바꿔준다.

 

추가 예제 코드

using System;
using System.Collections.Generic;
using System.Linq;

public partial class Program
{
    static void Main(string[] args)
    {
        var list = new List<int>() { 1, 2, 3, 4, 5 };
        var string_list = new List<string>() { "a", "b", "c", "d", "e" };
        var string_list2 = new List<string>() { "f", "g", "h", "i", "j" };
        var float_list = new List<float>() { 1.2F, 3.54F, 5.36F, 8.3F, 4.31F };

        var result = list.Zip(string_list).Zip(string_list2).Zip(float_list);

        Console.WriteLine("-------------------------------------------");

        foreach (var item in result)
        {
            Console.WriteLine($"item : {item}");
            Console.WriteLine($"first item : {item.First}");
            Console.WriteLine($"second item : {item.Second}");
            Console.WriteLine($"first first item : {item.First.First}");
            Console.WriteLine($"first second item : {item.First.Second}");
            Console.WriteLine($"first first first item : {item.First.First.First}");
            Console.WriteLine($"first first second item : {item.First.First.Second}");
            Console.WriteLine("-------------------------------------------");
        }
    }
}

'프로그래밍 > C# LINQ' 카테고리의 다른 글

C# LINQ - Enumerable.TakeWhile  (0) 2024.03.28
C# 표준 질의 연산자(Standard Query Operators)  (1) 2024.02.26
C# Linq - Enumerable.Take()  (0) 2024.02.26
C# Linq - Enumerable.Reverse()  (0) 2024.02.19
C# Linq - Enumerable.OfType()  (1) 2024.02.16

댓글