Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 배열의 특정 차원에 포함된 전체 요소 수 구하기 – GetLongLength() 메서드 완벽 가이드

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()를 사용하는 것이 더 안전합니다.