3.3 배열
여러분도 잘 알다시피 배열은 같은 형식의 여러 개의 요소(원소)를 포함하는 데이터 구조입니다. C#에서는 효과적으로 배열을 표현하기 위해 추상 클래스 Array를 제공하고 있으며 모든 배열은 Array 기반의 파생 클래스 형식 개체입니다. 먼저, 가장 단순한 1차원 배열을 선언하고 사용하는 예를 살펴보기로 합시다.
▶ 1차원 배열의 선언
int[] arr1; arr1 = new int[5]; int[] arr2 = new int[5]; int[] arr3 = new int[] { 1, 2, 3, 4, 5 }; int[] arr4 = new int[5] { 1, 2, 3, 4, 5 }; |
1차원 배열은 변수 선언 시에 요소 형식과 배열명 사이에 [ ]를 명시하여 선언합니다. 그리고 개체를 생성할 때에는 new 연산자와 요소 형식, [요소 개수]를 명시합니다. 1차원 배열을 선언과 동시에 초기화할 때는 초기값을 { }안에 명시하여 초기화하거나 요소의 개수를 명시하여 개체를 생성하면 됩니다. 만약, 초기값을 명시하지 않으면 기본값으로 초기화가 되며 초기값을 명시하면 요소의 개수를 명시하지 않아도 됩니다.
배열을 사용할 때에는 배열명과 인덱스 연산자([ ])및 요소의 상대적 위치(0부터 시작)를 통해 각 요소에 접근할 수 있으며 이 외에 기반 클래스인 Array에서 제공되는 다양한 속성과 메서드를 사용할 수 있습니다.
▶배열의 인덱스 연산자 사용
int[] arr = new int[4]{10,8,1,6}; for (int i = 0; i < arr.Length; i++) { Console.Write("{0} ", arr[i]); } |
▶실행 결과 10 8 1 6 |
▶Array 추상 클래스의 정적 메서드 Sort 사용
int[] arr = new int[4] { 5, 8, 2, 1 }; Console.WriteLine("요소의 개수:{0}", arr.Length); foreach (int elem in arr) { Console.WriteLine(elem.ToString()); } Array.Sort(arr); Console.WriteLine("정렬 후"); foreach (int elem in arr) { Console.WriteLine(elem.ToString()); } |
▶ 실행 결과 요소의 개수:4 5 8 2 1 정렬 후 1 2 5 8 |
C#에서 다차원 배열은 다음과 같이 선언하여 사용할 수 있습니다.
▶다차원 배열 선언
int[,] arr1; arr1 = new int[2, 3]; arr1 = new int[,] { { 1, 2, 3 }, { 4, 5, 6, } }; int[, ,] arr2 = new int[4, 2, 3]; int[,] arr3 = new int[,]{{1,2},{4,5},{5,6}}; int[,] arr4 = new int[3,2] { { 1, 2 }, { 4, 5 }, { 5, 6 } }; |
C#에서 다차원 배열을 선언할 때 [ ]안에 콤마를 통해 차수를 결정할 수 있습니다. 그리고 개체를 생성할 때는 각 차수의 요소 개수를 명시하거나 초기값을 명시하여 개체를 생성해야 합니다. 다차원 배열을 사용할 때도 각 차수의 상대적 거리를 인덱스 연산자 내부([상대적 거리, 상대적 거리])에 명시하여 사용합니다.
▶다차원 배열에서 인덱스 연산자([ ]) 사용
int[,] arr = new int[3, 2] { { 1, 2 }, { 4, 5 }, { 5, 6 } }; Console.WriteLine("차수:{0} 요소의 개수:{1}", arr.Rank, arr.Length); arr[2, 1] = 8; for (int i = 0; i < 3; i++) { for (int j = 0; j < 2; j++) { Console.WriteLine("arr[{0},{1}]:{2}", i,j, arr[i, j]); } } foreach (int elem in arr) { Console.WriteLine(elem.ToString()); } |
▶ 실행 결과 차수:2 요소의 개수:6 arr[0,0]:1 arr[0,1]:2 arr[1,0]:3 arr[1,1]:4 arr[2,0]:5 arr[2,1]:6 1 2 4 5 5 8 |
C#에서는 가변 길이의 배열을 지원합니다. 가변 배열은 배열을 요소로 하는 배열로 각 요소 배열의 크기를 다르게 지정할 수 있습니다.
▶ 가변 길의 배열의 선언
int[][] arr1; arr1 = new int[2][]; arr1[0] = new int[3]; arr1[1] = new int[6]; int[][] arr2 = new int[3][]; arr2[0] = new int[3]; arr2[1] = new int[] { 1, 2, 3, 4 }; arr2[2] = new int[2] { 1, 2 }; int[][] arr3 = new int[][] { new int[] { 1, 2, 3 }, new int[]{ 4, 5, 6 } }; |
가변 배열은 요소를 지정하지 않으면 초기값인 null로 초기화됩니다. 그리고 각 요소에 배열 개체가 올 수 있으므로 이를 이용하면 다양한 형태의 배열을 사용할 수 있습니다.
▶ 가변 길이 배열의 사용 예
int[][] array = new int[][] { new int[] { 1, 2, 3 }, new int[] { 4, 5 } };
foreach (int[] elemArray in array) { foreach (int elem in elemArray) { Console.Write(elem.ToString()); } Console.WriteLine(); } |
▶실행 결과 1 2 3 4 5 |
여기에서는 가장 기본적인 컬렉션인 배열에 대해서만 다루었으며 좀 더 다양한 컬렉션에 대해서는 9장 컬렉션과 인터페이스에서 설명할게요.
'언어 자료구조 알고리즘 > Escort C#' 카테고리의 다른 글
[C#] 5.1.2 멤버 속성 (0) | 2016.05.02 |
---|---|
[C#] 5.1 캡슐화 대상(멤버) - 멤버 필드 (0) | 2016.05.02 |
[C#] 5. 캡슐화 (0) | 2016.05.02 |
[C#] 4. 값(value) 형식 (0) | 2016.04.01 |
[C#] 3.4 string (0) | 2016.04.01 |
[C#] 3.2 Boxing 과 UnBoxing (0) | 2016.04.01 |
[C#] 3. 형식 개요, 3.1 object (0) | 2016.04.01 |
[C#] 2.2.2 식과 문 (0) | 2016.04.01 |
[C#] 2.2 해야 할 일에 관한 문법 사항, 2.2.1 연산자 (0) | 2016.04.01 |
[C#] 2. C# 구성 요소, 2.1 데이터에 관한 문법 사항 (1) | 2016.04.01 |