C#의 배열은 생성 시 크기가 고정되기 때문에 요소를 직접 제거하는 메서드를 제공하지 않습니다. 따라서 배열에서 요소를 삭제하려면 삭제하고자 하는 위치부터 뒤에 있는 요소들을 한 칸씩 앞으로 이동(shift)시키는 방식을 사용해야 합니다.
배열 요소 삭제의 기본 원리
먼저 5개의 요소를 가진 배열이 있다고 가정해 보겠습니다.
int[] arr = new int[5] {35, 50, 55, 77, 98};여기서 2번째 위치의 요소를 삭제하고 싶다면 변수 "pos = 2"로 설정한 뒤, 해당 위치 이후의 모든 요소를 앞으로 한 칸씩 이동시키면 됩니다.
// 요소들을 앞으로 이동
for (i = pos-1; i < 4; i++) {
arr[i] = arr[i + 1];
}이렇게 하면 삭제된 위치 뒤의 값들이 자연스럽게 앞당겨지며, 마지막 인덱스는 빈 상태가 됩니다. 배열의 유효 크기를 하나 줄인 것처럼 취급하면 삭제 효과를 얻을 수 있습니다.
전체 예제 코드
아래는 위 원리를 적용한 완전한 C# 코드입니다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Demo {
class Program {
static void Main() {
int i = 0;
int pos;
int[] arr = new int[5] {35, 50, 55, 77, 98};
Console.WriteLine("삭제 전 요소:");
for (i = 0; i < 5; i++) {
Console.WriteLine("Element[" + (i) + "]: "+arr[i]);
}
// 삭제할 항목의 위치를 2번째, 즉 arr[1]로 지정
pos = 2;
// 요소들을 앞으로 이동
for (i = pos-1; i < 4; i++) {
arr[i] = arr[i + 1];
}
Console.WriteLine("삭제 후 요소:");
for (i = 0; i < 4; i++) {
Console.WriteLine("Element[" + (i + 1) + "]: "+arr[i]);
}
Console.WriteLine();
}
}
}실행 결과
삭제 전 요소: Element[0]: 35 Element[1]: 50 Element[2]: 55 Element[3]: 77 Element[4]: 98 삭제 후 요소: Element[1]: 35 Element[2]: 55 Element[3]: 77 Element[4]: 98
참고: List<T>를 활용한 더 간편한 방법
요소의 추가·삭제가 빈번하게 발생하는 경우에는 고정 크기 배열 대신 List<T>를 사용하는 것이 좋습니다. List<T>는 Remove(), RemoveAt() 같은 메서드를 기본적으로 제공하기 때문에 별도의 이동 로직 없이 손쉽게 요소를 삭제할 수 있습니다.