C#의 Array 클래스가 제공하는 GetValue() 메서드는 배열에서 지정된 위치에 저장된 값을 가져오는 데 사용됩니다. 인덱스는 32비트 정수(int) 형태로 지정하며, 1차원 배열뿐 아니라 2차원 이상의 다차원 배열에서도 활용할 수 있습니다. 반대로 배열에 값을 저장할 때는 SetValue() 메서드를 사용합니다.
1. Array.CreateInstance로 배열 생성 및 값 설정
먼저 Array.CreateInstance 메서드를 사용해 배열을 동적으로 생성합니다. 아래 예제에서는 문자열 타입의 3×6 크기 2차원 배열을 만들고, SetValue() 메서드로 각 위치에 값을 저장했습니다.
Array arr = Array.CreateInstance(typeof(String), 3, 6);
arr.SetValue("One", 0, 0);
arr.SetValue("Two", 0, 1);
arr.SetValue("Three", 0, 2);
arr.SetValue("Four", 0, 3);
arr.SetValue("Five", 1, 4);
arr.SetValue("Six", 1, 5);
arr.SetValue("Seven", 1, 2);
arr.SetValue("Eight", 1, 3);2. 반복문과 GetValue()로 배열 값 출력하기
배열의 각 차원 길이는 GetLength() 메서드로 구할 수 있습니다. 이 길이를 이용해 중첩 반복문을 수행하면서 GetValue() 메서드로 모든 요소의 값을 순서대로 화면에 출력합니다.
for (int i = 0; i < a; i++)
for (int j = 0; j < b; j++)
Console.WriteLine(arr.GetValue(i, j));전체 예제 코드
지금까지의 내용을 하나의 완전한 프로그램으로 정리하면 다음과 같습니다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Demo {
class Program {
static void Main(string[] args) {
// 2차원 배열 생성
Array arr = Array.CreateInstance(typeof(String), 3, 6);
// SetValue()로 값 저장
arr.SetValue("One", 0, 0);
arr.SetValue("Two", 0, 1);
arr.SetValue("Three", 0, 2);
arr.SetValue("Four", 0, 3);
arr.SetValue("Five", 1, 4);
arr.SetValue("Six", 1, 5);
arr.SetValue("Seven", 1, 2);
arr.SetValue("Eight", 1, 3);
// 각 차원의 길이 가져오기
int a = arr.GetLength(0);
int b = arr.GetLength(1);
// GetValue()로 값 읽기
for (int i = 0; i < a; i++)
for (int j = 0; j < b; j++)
Console.WriteLine(arr.GetValue(i, j));
Console.ReadLine();
}
}
}실행 결과
프로그램을 실행하면 설정된 순서대로 배열의 값이 출력됩니다. 값이 지정되지 않은 인덱스 위치는 빈 문자열로 표시됩니다.
One Two Three Four Seven Eight Five Six
정리
GetValue() 메서드는 다양한 오버로드를 제공합니다. 1차원 배열에서는 GetValue(int index)를, 2차원 배열에서는 GetValue(int index1, int index2)를 사용할 수 있으며, params int[] indices 형태의 오버로드를 이용하면 3차원 이상의 다차원 배열 값도 손쉽게 읽을 수 있습니다. Array.CreateInstance로 동적 배열을 생성한 경우에는 일반 배열 문법(arr[i, j]) 대신 GetValue()와 SetValue()를 사용하는 것이 표준적인 접근 방식입니다.