C#에서는 두 개의 배열이나 리스트를 Zip() 메서드를 활용하면 단 하나의 foreach 문으로 동시에 반복 처리할 수 있습니다. Zip은 LINQ에서 제공하는 확장 메서드로, 두 시퀀스의 요소들을 인덱스 순서대로 하나씩 짝지어 새로운 시퀀스를 생성해 줍니다.
1단계: 두 개의 배열 선언
먼저 int형과 string형 요소를 가진 두 개의 배열을 준비합니다.
var val = new [] { 20, 40, 60};
var str = new [] { "ele1", "ele2", "ele3"};2단계: Zip() 메서드로 두 배열 결합
Zip() 메서드를 사용하면 두 배열을 병렬로 처리할 수 있습니다. 람다 식을 통해 각 배열의 대응되는 요소를 하나의 객체로 묶어줍니다.
var res = val.Zip(str, (n, w) => new { Number = n, Word = w });위 코드는 int 요소를 가진 val 배열과 string 요소를 가진 str 배열의 요소들을 순서대로 짝지어 익명 타입(Number, Word)의 컬렉션을 만듭니다.
3단계: foreach 문으로 두 배열 반복하기
이제 하나의 foreach 문만으로 두 배열의 요소를 동시에 순회할 수 있습니다.
using System;
using System.Collections.Generic;
using System.Linq;
public class Demo {
public static void Main() {
var val = new [] { 20, 40, 60};
var str = new [] { "ele1", "ele2", "ele3"};
var res = val.Zip(str, (n, w) => new { Number = n, Word = w });
foreach(var a in res) {
Console.WriteLine(a.Number + a.Word);
}
}
}실행 결과
20ele1 40ele2 60ele3
참고 사항
Zip() 메서드는 두 시퀀스 중 더 짧은 쪽의 길이에 맞춰 결과를 생성합니다. 따라서 두 배열의 길이가 다를 경우, 남는 요소들은 무시되므로 주의해야 합니다.