배열(C# 및 Java)
업데이트: 2007년 11월
배열은 데이터 형식이 동일한 항목의 순서가 지정된 컬렉션입니다. 배열에는 원하는 항목의 배열 시작 위치를 기준으로 한 오프셋과 함께 배열 이름을 사용하여 액세스합니다. Java와 비교할 때 C#에서 배열을 선언하고 사용하는 방법에는 몇 가지 중요한 차이가 있습니다.
1차원 배열
1차원 배열에는 일정한 수의 항목이 순차적인 방식으로 저장되므로 임의의 한 항목을 식별하기 위한 인덱스 값이 하나만 필요합니다. C#에서는 배열 선언의 대괄호 앞에 데이터 형식이 나와야 하며 Java에서와 달리 이 대괄호를 변수 이름 뒤에 배치할 수 없습니다. 따라서 integers 형식의 배열은 다음 구문을 사용하여 선언됩니다.
int[] arr1;
C#에서는 다음과 같은 선언을 사용할 수 없습니다.
//int arr2[]; //compile error
배열을 선언한 후에는 Java에서와 마찬가지로 new 키워드를 사용하여 배열의 크기를 설정할 수 있습니다. 다음 예제에서는 배열 참조를 선언합니다.
int[] arr;
arr = new int[5]; // create a 5 element integer array
그런 다음 Java와 동일한 구문을 사용하여 1차원 배열의 요소에 액세스합니다. C# 배열 인덱스도 0부터 시작합니다. 다음 예제에서는 이전 배열의 마지막 요소에 액세스합니다.
System.Console.WriteLine(arr[4]); // access the 5th element
초기화
C# 배열 요소는 Java에서와 동일한 구문을 사용하여 만들 때 초기화할 수 있습니다.
int[] arr2Lines;
arr2Lines = new int[5] {1, 2, 3, 4, 5};
Java의 경우와 달리 C# 이니셜라이저의 수는 배열 크기와 정확하게 일치해야 합니다. 이 기능을 사용하면 C# 배열을 한 줄에서 선언하고 초기화할 수 있습니다.
int[] arr1Line = {1, 2, 3, 4, 5};
이 구문에서는 이니셜라이저의 수와 동일한 크기의 배열을 만듭니다.
프로그램 루프에서 초기화
C#에서는 for 루프를 사용하는 방식으로 배열을 초기화할 수도 있습니다. 다음 루프에서는 배열의 각 요소를 0으로 설정합니다.
int[] TaxRates = new int[5];
for (int i=0; i<TaxRates.Length; i++)
{
TaxRates[i] = 0;
}
가변 배열
C#과 Java에서 사각형이 아닌 가변 배열을 만들 수 있습니다. 이 배열에서는 각 행에 포함된 열의 수가 다릅니다. 예를 들어, 다음 가변 배열의 첫 번째 행에는 엔트리 4개가 들어 있고 두 번째 행에는 엔트리 3개가 들어 있습니다.
int[][] jaggedArray = new int[2][];
jaggedArray[0] = new int[4];
jaggedArray[1] = new int[3];
다차원 배열
C#에서는 형식이 동일한 값의 매트릭스인 일반적인 다차원 배열을 만들 수 있습니다. Java와 C# 모두 가변 배열을 지원하는 반면, C#에서는 배열의 배열인 다차원 배열도 지원합니다.
다음 구문을 사용하여 다차원 사각형 배열을 선언합니다.
int[,] arr2D; // declare the array reference
float[,,,] arr4D; // declare the array reference
배열을 선언한 후에 다음과 같이 배열에 메모리를 할당합니다.
arr2D = new int[5,4]; // allocate space for 5 x 4 integers
배열의 요소에는 다음 구문을 사용하여 액세스합니다.
arr2D[4,3] = 906;
배열은 0부터 시작하므로 이 줄에서는 네 번째 행의 다섯 번째 열에 있는 요소를 906으로 설정합니다.
초기화
다차원 배열은 다음 방법 중 하나를 사용하여 단일 문으로 작성, 설정 및 초기화할 수 있습니다.
int[,] arr4 = new int [2,3] { {1,2,3}, {4,5,6} };
int[,] arr5 = new int [,] { {1,2,3}, {4,5,6} };
int[,] arr6 = { {1,2,3}, {4,5,6} };
프로그램 루프에서 초기화
배열의 모든 요소를 다음과 같이 중첩된 루프를 사용하여 초기화할 수 있습니다.
int[,] arr7 = new int[5,4];
for(int i=0; i<5; i++)
{
for(int j=0; i<4; j++)
{
arr7[i,j] = 0; // initialize each element to zero
}
}
System.Array 클래스
.NET Framework에서 배열은 Array 클래스의 인스턴스로 구현됩니다. 이 클래스에서는 Sort 및 Reverse 같은 여러 가지 유용한 메서드를 제공합니다.
다음 예제에서는 이러한 메서드를 사용하여 간단하게 작업하는 방법을 보여 줍니다. 먼저 Reverse 메서드를 사용하여 배열의 요소 순서를 반전시킨 다음 Sort 메서드를 사용하여 각 요소를 정렬합니다.
class ArrayMethods
{
static void Main()
{
// Create a string array of size 5:
string[] employeeNames = new string[5];
// Read 5 employee names from user:
System.Console.WriteLine("Enter five employee names:");
for(int i=0; i<employeeNames.Length; i++)
{
employeeNames[i]= System.Console.ReadLine();
}
// Print the array in original order:
System.Console.WriteLine("\nArray in Original Order:");
foreach(string employeeName in employeeNames)
{
System.Console.Write("{0} ", employeeName);
}
// Reverse the array:
System.Array.Reverse(employeeNames);
// Print the array in reverse order:
System.Console.WriteLine("\n\nArray in Reverse Order:");
foreach(string employeeName in employeeNames)
{
System.Console.Write("{0} ", employeeName);
}
// Sort the array:
System.Array.Sort(employeeNames);
// Print the array in sorted order:
System.Console.WriteLine("\n\nArray in Sorted Order:");
foreach(string employeeName in employeeNames)
{
System.Console.Write("{0} ", employeeName);
}
}
}
출력
Enter five employee names:
Luca
Angie
Brian
Kent
Beatriz
Array in Original Order:
Luca Angie Brian Kent Beatriz
Array in Reverse Order:
Beatriz Kent Brian Angie Luca
Array in Sorted Order:
Angie Beatriz Brian Kent Luca