C#에서 배열의 지정된 차원(dimension)에 속한 전체 요소 개수를 확인하려면 Array.GetLongLength() 메서드를 사용하면 됩니다. 이 메서드는 해당 차원에 포함된 요소 수를 64비트 정수(long) 형태로 반환하기 때문에, 매우 큰 배열을 다룰 때도 안전하게 사용할 수 있습니다.
아래 예제를 통해 실제 동작 방식을 살펴보겠습니다.
예제 1: 1차원 문자열 배열
using System;
public class Demo {
public static void Main() {
string[] products = new string[] { "Andy", "Mark", "Gary", "Andre"};
Console.WriteLine("'A'로 시작하는 이름이 하나라도 있는가? = {0}",
Array.Exists(products, ele => ele.StartsWith("A")));
Console.WriteLine("배열이 고정 크기인가? = " + products.IsFixedSize);
Console.WriteLine("배열이 읽기 전용인가? = " + products.IsReadOnly);
Console.WriteLine("배열이 동기화되어 있는가? = " + products.IsSynchronized);
Console.WriteLine("첫 번째 요소의 인덱스 = " + products.GetLowerBound(0));
Console.WriteLine("마지막 요소의 인덱스 = " + products.GetUpperBound(0));
Console.WriteLine("GetLongLength(0) = " + products.GetLongLength(0));
}
}실행 결과
'A'로 시작하는 이름이 하나라도 있는가? = True 배열이 고정 크기인가? = True 배열이 읽기 전용인가? = False 배열이 동기화되어 있는가? = False 첫 번째 요소의 인덱스 = 0 마지막 요소의 인덱스 = 3 GetLongLength(0) = 4
결과 분석
- GetLowerBound(0) : 0번째 차원의 시작 인덱스를 반환합니다. 일반적인 배열은 항상
0입니다. - GetUpperBound(0) : 0번째 차원의 마지막 인덱스를 반환합니다. 요소가 4개이므로
3입니다. - GetLongLength(0) : 0번째 차원에 포함된 요소의 총 개수를 반환합니다. 여기서는
4입니다. - IsFixedSize : 배열은 생성 후 크기 변경이 불가능하므로 항상
True입니다.
이번에는 다차원 배열에서 GetLongLength()를 활용하는 방법을 살펴보겠습니다.
예제 2: 3차원 문자열 배열
using System;
public class Demo {
public static void Main() {
string[,] stdNames = new string[,] {
{ { "John", "Gary" },
{ "Jacob", "Harry" } },
{ { "Kevin", "Ryan" },
{ "David", "Mark" } },
};
Console.WriteLine("배열이 고정 크기인가? = " + stdNames.IsFixedSize);
Console.WriteLine("배열이 읽기 전용인가? = " + stdNames.IsReadOnly);
Console.WriteLine("배열이 동기화되어 있는가? = " + stdNames.IsSynchronized);
Console.WriteLine("첫 번째 요소의 인덱스 = " + stdNames.GetLowerBound(0));
Console.WriteLine("마지막 요소의 인덱스 = " + stdNames.GetUpperBound(0));
Console.WriteLine("GetLongLength(0) = " + stdNames.GetLongLength(0));
Console.WriteLine("GetLongLength(1) = " + stdNames.GetLongLength(1));
}
}실행 결과
배열이 고정 크기인가? = True 배열이 읽기 전용인가? = False 배열이 동기화되어 있는가? = False 첫 번째 요소의 인덱스 = 0 마지막 요소의 인덱스 = 1 GetLongLength(0) = 2 GetLongLength(1) = 2
결과 분석
- 이 배열은
[2, 2, 2]형태의 3차원 배열로, 총 8개의 요소를 가집니다. - GetLongLength(0) : 첫 번째 차원의 길이인
2를 반환합니다. - GetLongLength(1) : 두 번째 차원의 길이 역시
2입니다. - GetUpperBound(0) : 첫 번째 차원의 마지막 인덱스는 길이가 2이므로
1입니다.
GetLength()와 GetLongLength()의 차이점
C#에는 비슷한 역할을 하는 GetLength(int dimension) 메서드도 존재합니다. 두 메서드의 차이는 반환 타입뿐입니다.
GetLength(): int(32비트) 형식으로 요소 수를 반환GetLongLength(): long(64비트) 형식으로 요소 수를 반환
일반적인 배열이라면 GetLength()로 충분하지만, 이론상 int 범위(2,147,483,647)를 초과할 수 있는 초대형 배열을 다루는 경우에는 GetLongLength()를 사용하는 것이 더 안전합니다.