2차원 배열
2차원 배열 선언
- 2개의 차원(세로+가로)으로 원소를 배치하는 2차원 배열
- 1차원 배열을 원소로 갖는 배열

차원의 길이를 뒤에서부터 읽어 해석
int[2, 3] → 길이가 3인 1차원 배열을 요소로 갖는 길이가 2인 2차원 배열
2차원 배열 초기화
- 2차원 배열의 원소 접근
- 첫 번째 차원과 두 번째 차원의 인덱스를 대괄호 [ ] 사이에 같이 입력

using System;
namespace _2DArray
{
class MainApp
{
static void Main(string[] args)
{
//2차원 배열의 첫 번째 초기화 방법
int[,] arr = new int[2, 3] { { 1, 2, 3 }, { 4, 5, 6 } };
//배열의 형식과 길이 명시
for (int i = 0; i < arr.GetLength(0); i++)
{
for (int j = 0; j < arr.GetLength(1); j++)
{
Console.Write($"[{i}, {j}] : {arr[i, j]} ");
}
Console.WriteLine();
}
Console.WriteLine();
//2차원 배열의 두 번째 초기화 방법
int[,] arr2 = new int[,] { { 1, 2, 3 }, { 4, 5, 6 } };
//배열의 길이를 생략
for (int i = 0; i < arr2.GetLength(0); i++)
{
for (int j = 0; j < arr2.GetLength(1); j++)
{
Console.Write($"[{i}, {j}] : {arr2[i, j]} ");
}
Console.WriteLine();
}
Console.WriteLine();
//2차원 배열의 세 번째 초기화 방법
int[,] arr3 = { { 1, 2, 3 }, { 4, 5, 6 } };
//형식과 길이를 모두 생략
for (int i = 0; i < arr2.GetLength(0); i++)
{
for (int j = 0; j < arr2.GetLength(1); j++)
{
Console.Write($"[{i}, {j}] : {arr3[i, j]} ");
}
Console.WriteLine();
}
Console.WriteLine();
}
}
}

다차원 배열
다차원 배열 선언
3차원 배열 : 2차원 배열을 요소로 갖는 배열, 배열의 각 차원 크기를 미리 정해주는 초기화 방법 권장
→ 컴파일타임에 초기화 코드와 선언문의 배열 차원 크기 비교
- 차원이 둘 이상인 배열
- 사용하는 인덱스 수가 2개, 3개, 4개, .. 로 증가

using System;
namespace _3DArray
{
class MainApp
{
static void Main(string[] args)
{
int[,,] array = new int[4, 3, 2] //배열의 형식과 길이 명시
{
{ {1, 2}, {3, 4}, {5, 6} },
{ {1, 4}, {2, 5}, {3, 6} },
{ {6, 5}, {4, 3}, {2, 1} },
{ {6, 3}, {5, 2}, {4, 1} },
};
for (int i = 0; i < array.GetLength(0); i++)
{
for (int j = 0; j < array.GetLength(1); j++)
{
Console.Write("{ ");
for (int k = 0; k < array.GetLength(2); k++)
{
Console.Write($"{array[i, j, k]} ");
}
Console.Write("} ");
}
Console.WriteLine();
}
}
}
}

가변 배열
가변 배열 (Jagged Array)
배열의 배열, 즉 배열을 요소로 갖는 배열
- 다양한 길이의 배열을 요소로 갖는 다차원 배열
- 가변 배열의 요소로 입력되는 배열은 그 길이가 모두 같을 필요가 없음


가변 배열 초기화
- 다양한 길이의 배열을 요소로 갖는 다차원 배열

using System;
namespace JaggedArray
{
class MainApp
{
static void PrintElement(int[][] tmpJagged)
{
foreach (int[] arr in tmpJagged)
{
Console.Write($"Length : {arr.Length}, ");
foreach (int e in arr)
{
Console.Write($"{e} ");
}
Console.WriteLine();
}
}
static void Main(string[] args)
{
int[][] jagged = new int[3][]; // 배열의 용량 3
jagged[0] = new int[5] { 1, 2, 3, 4, 5 }; // 0번 요소에는 길이가 5인 배열
jagged[1] = new int[] { 10, 20, 30 }; // 1번 요소에는 길이가 3인 배열
jagged[2] = new int[] { 100, 200 }; // 2번 요소에는 길이가 2인 배열
PrintElement(jagged);
Console.WriteLine();
int[][] jagged2 = new int[2][] {
new int[] {1000, 2000 },
new int[4] { 6,7,8,9} };
PrintElement(jagged2);
}
}
}

'전공 > C# 프로그래밍' 카테고리의 다른 글
10강. 인덱서 (Indexer) & foreach가 가능한 객체 만들기 (0) | 2023.04.20 |
---|---|
9강. 컬렉션 (Collection) (0) | 2023.04.20 |
8강. 배열 (1) (0) | 2023.04.19 |
7강. 객체지향 프로그래밍과 클래스 (6)튜플 (0) | 2023.04.19 |
7강. 객체지향 프로그래밍과 클래스 (5)중첩 클래스, 분할 클래스, 확장 메소드, 구조체 (0) | 2023.04.18 |
댓글