Introduction
- 배열은
type[]
을 이용하여 선언하며, 형식이 동일한 변수를 여러 개 저장할 수 있다.type[] name;
- 배열 요소는 배열이 만들어질 때 초기화될 수 있으며, 초기화되지 않은 요소는 기본값으로 설정된다.
- 참조 형식 :
null
- 값 형식 :
0
- 참조 형식 :
- C# 12부터, 배열은 컬렉션 식을 사용하여 초기화할 수 있다.
- 배열은 다음과 같은 특징을 가진다.
- 배열은 단일 차원, 다차원 또는 가변일 수 있다.
- 차원은 선언할 때, 길이는 인스턴스가 생성될 때 설정된다.
- 배열의 인덱싱은
0
부터 시작한다. - 배열 형식은 IList, IEnumerable을 구현한다.
단일 차원 배열
다음 예는 1차원 배열을 초기화하고 사용하는 것을 보여준다.
char[] chars = new char[5] { 'a', 'b', 'c', 'd', 'e' }; Write(chars); void Write(char[] arr) { foreach (char c in arr) Console.Write(c); } /* output: abcde */
다차원 배열
다음 예는 다차원 배열을 초기화하고 사용하는 것을 보여준다.
int[,] array2D = { { 1, 2 }, { 3, 4 } }; Write2D(array2D); void Write2D(int[,] ints) { for (int i = 0; i < ints.GetLength(0); i++) { for (int j = 0; j < ints.GetLength(1); j++) { Console.Write(ints[i, j]); } Console.WriteLine(); } } /* output: 12 34 */
int[,,] array3D = { { { 1, 2, 3 }, { 4, 5, 6 } }, { { 7, 8, 9 }, { 10, 11, 12 } } }; Write3D(array3D); void Write3D(int[,,] ints) { for (int i = 0; i < ints.GetLength(0); i++) { for (int j = 0; j < ints.GetLength(1); j++) { for (int k = 0; k < ints.GetLength(2); k++) { Console.Write(ints[i, j, k]); } Console.WriteLine(); } Console.WriteLine(); } } /* output: 123 456 789 101112 */
가변 배열
가변 배열은 요소로 배열을 가지고, 각 요소의 크기가 다를 수 있다.
int[][] array = [ [1, 2, 3, 4, 5], [6, 7, 8], [9, 10, 11, 12] ]; Write(array); void Write(int[][] ints) { foreach (var subArr in ints) { foreach (var value in subArr) { Console.Write($"{value}, "); } Console.WriteLine(); } } /* output: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, */
암시적으로 형식화된 배열
배열 초기화 시 지정된 요소에 의해 형식 유추가 가능한 경우 암시적으로 형식화된 배열을 생성할 수 있다.
var foo = new[] { 1, 2, 3, 4, 5 }; var bar = new[] { new { X = 1, Y = 2 }, new { X = 5, Y = 6 } }; Console.WriteLine(string.Join(", ", foo)); foreach (var item in bar) Console.WriteLine(item); /* output: 1, 2, 3, 4, 5 { X = 1, Y = 2 } { X = 5, Y = 6 } */