티스토리 뷰

LANGUAGE/C#

[C#] 배열

진심스테이크 2018. 6. 14. 11:01

일차원 배열

- 같은 데이터형 + 변수명 + 순차적인 메모리 나열

- 참조형 : new를 통해 생성

- Array로부터 파생된 참조형

- 기본 형태

  데이터형[ ] 배열명;

  ex) int[ ] array_name;

#배열명은 참조형이기 때문에 데이터형뒤에 [ ]를 붙힘

- Array.Length 속성

- foreach 사용 가능 (읽기 전용)

namespace _0614
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] array = { 1, 2, 3, 4 };
            //int[] array = new int[] { 1, 2, 3, 4 };
            for (int i = 0; i < 4; i++)
                Console.Write("{0} ", array[i]);
            Console.Write('\n');

            for(int i = 0; i < array.Length; i++)
                Console.Write("{0} ", array[i]);
            Console.Write('\n');

            foreach (int m in array)
                Console.Write("{0} ", m);
            Console.Write('\n');

            string[] days = {"Sun", "Mon", "Tue", "Wed" , "Thu" , "Fri" , "Sat" };
            foreach (string str in days)
                Console.Write(str + " ");
        }
    }
}

 

이차원 배열 및 다차원 배열

- 일차원 배열을 행과 열의 개념으로 나눔

#행이 먼저

- 면은 ,로 구분 (다차원)

- 기본 형태

  데이터형[,] 배열명;

  데이터형[,,] 배열명;

namespace _0614
{
    class Program
    {
        static void Main(string[] args)
        {
            int[,] array = new int[2, 2];
            array[0, 0] = 1;
            array[0, 1] = 2;
            array[1, 0] = 3;
            array[1, 1] = 4;

            for (int i = 0; i < 2; i++)
                for (int j = 0; j < 2; j++)
                    Console.Write(array[i, j] + " ");
            Console.Write('\n');

            int[,] array2 = { { 1, 2 }, { 3, 4 } };
            for (int i = 0; i < 2; i++)
                for (int j = 0; j < 2; j++)
                    Console.Write(array2[i, j] + " ");
            Console.Write('\n');

            string[,,] array3 = { { { "ab", "cd" }, { "ef", "gh" } },{ { "ij", "kl" }, { "mn", "op" } } };
            for (int i = 0; i < 2; i++)
                for (int j = 0; j < 2; j++)
                    for (int k = 0; k < 2; k++)
                        Console.Write(array3[i, j, k] + " ");
        }
    }
}

 


 

가변 배열

- 행과 열에 대한 크기를 미리 정해놓지 않음

- , 를 쓰지 않음

namespace _0614
{
    class Program
    {
        static void Main(string[] args)
        {
            int[][] array = new int[2][];
            array[0] = new int[3] { 1, 2, 3 }; //[3]은 생략 가능
            array[1] = new int[2] { 4, 5 };

            for (int i = 0; i < array.Length; i++)
                for (int j = 0; j < array[i].Length; j++)
                    Console.Write(array[i][j]);
        }
    }
}
 
namespace _0614
{
    class Program
    {
        static void Main(string[] args)
        {
            int[][][] array = new int[2][][]; //[2]는 면에 대한 생성
            array[0] = new int[2][]; //면에 2개의 행이 있음
            array[1] = new int[3][]; //면에 3개의 행이 있음

            array[0][0] = new int[3] { 1, 2, 3 };
            array[0][1] = new int[2] { 4, 5 };

            array[1][0] = new int[3] { 6, 7, 8 };
            array[1][1] = new int[2] { 9, 10 };
            array[1][2] = new int[2] { 11, 12 };

            for (int i = 0; i < array.Length; i++)
                for (int j = 0; j < array[i].Length; j++)
                    for (int k = 0; k < array[i][j].Length; k++)
                        Console.Write("{0} ", array[i][j][k]);
        }
    }
}

 


 

일차원 배열을 함수로 전달

namespace _0614
{
    class Program
    {
        static void TransArray(string[] arr)
        {
            string[] days = { "일", "월", "화", "수", "목", "금", "토" };
            for (int i = 0; i < arr.Length; i++)
                arr[i] = days[i];
        }
        static void Main(string[] args)
        {
            string[] days_e = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
            TransArray(days_e);
            foreach (string str in days_e)
                Console.Write(str);
        }
    }
}

 

 

이차원 배열을 함수로 전달

- 형식 참고

namespace _0614
{
    class Program
    {
        void setArray(int[,] arr)
        {

        }
        static void Main(string[] args)
        {
            int[,] array = { { 1, 2, 3 }, { 4, 5, 6 } };
            setArray(array);
        }
    }
}

 


 

배열을 리턴하는 함수

- 배열이 참주하는 객체의 주소값을 리턴

namespace _0614
{
    class Program
    {
        static int[] CreateArray1(int size)
        {
            int[] array1 = new int[size];
            for (int i = 0; i > array1.Length; i++)
                array1[i] = i;

            return array1;
        }

        static int[,] CreateArray2(int row, int col)
        {
            int index = 0;
            int[,] array2 = new int[row, col];
            for (int i = 0; i < row; i++)
                for (int j = 0; j < col; j++)
                    array2[i, j] = index++;

            return array2;
        }

        static void Main(string[] args)
        {
            //참조 배열 변수
            int[] array1;
            int[,] array2;

            array1 = CreateArray1(5);
            array2 = CreateArray2(2, 3);

            for (int i = 0; i < array1.Length; i++)
                Console.Write(array1[i]);
            Console.WriteLine();
            //00000

            for (int i = 0; i < 2; i++)
                for (int j = 0; j < 3; j++)
                    Console.Write(array2[i, j]);
            Console.WriteLine();
            //012345
        }
    }
}

 

 


 

배열의 메소드

- 배열 : Array 클래스로부터 파생된 객체

- 배열의 초기화 메소드

  public static void Clear (Array array, int index, int length)

- 배열의 개수만큼 초기화

namespace _0614
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] array1 = { 1, 2, 3, 4, 5 };
            Array.Clear(array1, 2, 3); //array1에서 2번째부터 3개를 초기화
            foreach (int m in array1)
                Console.Write(m);
            Console.WriteLine();
            //12000

            Array.Clear(array1, 0, array1.Length);
            foreach (int m in array1)
                Console.Write(m);
            Console.WriteLine();
            //00000
        }
    }
}

 

 

배열 복사 메소드

- 기본 형태

  public Object Clone( )

namespace _0614
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] array1 = { 1, 2, 3, 4 };
            int[] CloneArray = (int[])array1.Clone(); //Clone의 리턴타입은 object이기 때문에 int를 캐스팅

            //array1과 CloneArray가 다른 메모리를 쓰고있는지 확인
            CloneArray[2] = 30;
            foreach (int m in array1)
                Console.Write(m);
            Console.WriteLine();
            //1234

            foreach (int m in CloneArray)
                Console.Write(m);
            Console.WriteLine();
            //12304

            string[] Days = { "일", "월", "화", "수", "목", "금", "토" };
            string[] DaysClone = (string[])Days.Clone();
            foreach (string str in DaysClone)
                Console.Write(str);
            Console.WriteLine();
            //일월화수목금토
        }
    }
}

 

 

 

'LANGUAGE > C#' 카테고리의 다른 글

[C#] 파일 입출력  (0) 2018.06.14
[C#] 기본 문법  (0) 2018.06.13
[C#] 값 형식 / 참조 형식  (0) 2018.06.12
[C#] 사용자 지정형  (0) 2018.06.12
[C#] 표준 입력  (0) 2018.06.12
댓글