동일한 데이터 타입의 데이터를 여러 개 저장하기 위한 연속된 메모리 공간이다.
배열은 메모리 크기가 고정이며 실제 값을 사용하는 개수가 고정일 때 사용한다.
C#의 배열의 갯수를 지정할 때는 정수 보다는 배열 Length를 사용하여 길이를 구한다.
배열 선언하기
자료형 [] 배열이름 = new 자료형[요소개수];
ex)
int[] array = new int[10];
float[] arrf = new float[20];
GameObject[] objs = new GameObject[4];
ex)
arr[0] = 1;
arr[1] = 2;
배열 초기화하기
배열을 초기화 하기 위해 반복문을 사용한다.
int [] array1 = new int [] {1, 3, 5, 7, 9};
string [] weekdays = new string [] {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
//or
int [] array2 = {1, 3, 5, 7, 9};
string [] weekdays = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
배열의 장단점
장점
연속된 메모리 공간에 데이터가 저장되므로 속도가 빠르다.
단점
할당된 배열의 크기는 변경할 수 없기 때문에 메모리 사용이 비효율적이다.
즉, 한번 메모리를 할당해 놓으면 데이터를 저장하지 않아도 메모리를 사용하게 된다.
따라서 메모리 효율성을 위해서 별도의 자료구조를 사용하는 것이다.
ex) List
2차원 배열
열과 행을 가진 2차원 구조로 연속된 데이터를 저장한다.
1차원 배열 : int [] arr = new int[5];
2차원 배열 : int [ , ] arr2 = new int[3, 5];
3차원 배열 : int [ , , ] arr3 = new int[4, 3, 5];
2차원 배열의 초기화
배열의 선언과 동시에 초기화 : 배열 데이터의 개수가 적은 경우 직접 대입
반복문을 사용하여 초기화
ex)
int[ , ]arr4 = new int[2, 4] {{1, 2, 3}, {4, 5, 6}};
//or
int[ , ]arr5 = new int[ ,] {{1, 2, 3}, {4, 5, 6}};
1차원 배열에서 2차원 배열로 변환하는 방법
행 : 1차원 요소 / 열 개수 + 1
열 : 1차원 요소 % 열 개수 + 1
//+1을 해주는 이유는 제로베이스를 기준으로 하기 때문이다.
ex)
행 : 9의 칸 수(10) / 8(열 기준 칸 수) = 2행
열 : 9의 칸 수(10) % 8(열 기준 칸 수)= 2열
가변 배열
참조형은 new를 사용해 할당
가변 배열 선언 형식
데이터형[][] 배열명;
ex)
int[][] array = new int[3][];
array[0] = new int[2];
array[1] = new int[3];
array[2] = new int[4];
ex)
int[][] array = new int[3][];
array[0] = new int[2]{1, 2};
array[1] = new int[3]{3, 4, 5};
array[2] = new int[4]{6, 7, 8, 9};
int[][] array = new int[3][];
array[0] = new int[] {1, 2};
array[1] = new int[]{3, 4, 5};
array[2] = new int[]{6, 7, 8, 9};
ex)
int[][] array = new int[][]
{
new int[]{1, 2, 3},
new int[]{4, 5, 6},
new int[]{7, 8, 9}
};
ex)
int[][] array = {
new int[]{1, 2, 3},
new int[]{4, 5, 6},
new int[]{7, 8, 9}
}
'C#' 카테고리의 다른 글
[C#][Unity 2D] npc와 대화 시스템 구현 (0) | 2022.12.15 |
---|---|
[C#][Unity] 2D 아이템 시간경과시 자동삭제 (0) | 2022.12.13 |
[C#][Unity] 2D 아이템 자동습득 (0) | 2022.11.28 |
[C#][Unity] SetActive와 enabled (0) | 2022.11.16 |
[C#][Unity] 2D 오브젝트 제거시 아이템드랍 (0) | 2022.11.13 |