C# 프로그래밍에서 2차원 배열을 1차원 배열로 변환해야 하는 경우가 종종 있습니다. 데이터 직렬화, 배열 병합, 또는 특정 API와의 호환성 등이 대표적인 예입니다. 이 글에서는 중첩 반복문을 사용하여 2차원 배열의 요소를 순서대로 1차원 배열에 복사하는 가장 기본적이고 확실한 방법을 소개합니다.
1. 배열 선언하기
먼저 변환 대상이 될 2차원 배열과 결과를 저장할 1차원 배열을 선언합니다.
int[] a = new int[2, 2] { {1, 2}, {3, 4} };
int[] b = new int[4];
위 코드에서 a는 2×2 크기의 2차원 배열이고, b는 총 4개(2×2)의 요소를 담을 수 있는 1차원 배열입니다. 변환 결과를 저장할 배열의 크기는 원본 배열의 모든 차원 크기를 곱한 값과 같아야 합니다.
2. 2차원 배열을 1차원 배열로 변환
중첩된 for 반복문으로 2차원 배열의 모든 요소를 행 우선(row-major) 순서로 탐색하고, 인덱스 변수 k를 이용해 1차원 배열에 차례대로 저장합니다.
for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++) {
b[k++] = a[i, j];
}
}
k++ 후위 증가 연산자 덕분에 매 반복마다 현재 값을 저장한 뒤 인덱스가 자동으로 1씩 증가하므로, 별도의 처리 없이도 요소가 순서대로 채워집니다.
3. 전체 예제 코드
다음은 C#에서 2차원 배열을 1차원 배열로 변환하는 완전한 코드입니다.
using System;
namespace Program {
class twodmatrix {
static void Main(string[] args) {
int[] a = new int[2, 2] {
{
1,
2
},{
3,
4
}
};
int i, j;
int[] b = new int[4];
int k = 0;
Console.WriteLine("Two-Dimensional Array...");
for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++) {
Console.WriteLine("a[{0},{1}] = {2}", i, j, a[i, j]);
}
}
Console.WriteLine("One-Dimensional Array...");
for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++) {
b[k++] = a[i, j];
}
}
for (i = 0; i < 2 * 2; i++) {
Console.WriteLine("{0}\t", b[i]);
}
Console.ReadKey();
}
}
}
실행 결과
Two-Dimensional Array... a[0,0] = 1 a[0,1] = 2 a[1,0] = 3 a[1,1] = 4 One-Dimensional Array... 1 2 3 4
정리 및 응용 팁
2차원 배열을 1차원 배열로 변환하는 핵심은 두 개의 중첩 반복문과 하나의 인덱스 변수입니다. 행 우선 순서로 요소를 순회하며 b[k++] = a[i, j] 패턴으로 값을 복사하면 됩니다.
배열의 크기가 고정되어 있지 않다면 하드코딩된 상수 대신 a.GetLength(0)(행 개수)과 a.GetLength(1)(열 개수)을 활용하세요. 이렇게 하면 어떤 크기의 2차원 배열이든 동일한 로직으로 변환할 수 있어 코드의 재사용성이 크게 향상됩니다.