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

8강. 배열 (2)

by 임 낭 만 2023. 4. 19.

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);
        }
    }
}

댓글