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

C# 배열에서 요소를 삭제하는 방법 – 요소 이동(Shift) 기법 완벽 정리

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() 같은 메서드를 기본적으로 제공하기 때문에 별도의 이동 로직 없이 손쉽게 요소를 삭제할 수 있습니다.