언어 자료구조 알고리즘/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장 컬렉션과 인터페이스에서 설명할게요. 

반응형