언어 자료구조 알고리즘/Escort C#

[C#] 3.3 배열

언제나휴일 2016. 4. 1. 16:52
반응형

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장 컬렉션과 인터페이스에서 설명할게요

반응형