C#/배열

[C#]배열 마지막 요소 제거하는 방법

DevStory 2022. 8. 28.

배열 마지막 요소 제거하는 방법

배열은 크기가 고정되어 있으므로 C#에서 배열의 마지막 요소를 제거할 수 없습니다. 배열이 생성되면, 배열의 크기가 고정으로 설정되므로 요소를 추가하거나 제거할 수 없습니다.

 

하지만, 마지막 요소가 제거된 새로운 배열을 생성하는 것은 가능합니다.

 

이번 포스팅은 배열의 마지막 요소가 제거된 새로운 배열을 생성하는 몇 가지 방법을 소개합니다.


방법 1. List로 변환

첫 번째 방법으로 배열을 크기가 동적인 List로 변환하여 마지막 요소를 제거할 수 있습니다.

 

[제거 방법]

순서 1. 배열을 List로 변환합니다.

순서 2. List의 마지막 요소를 제거합니다.

순서 3. 마지막 요소가 제거된 List를 다시 배열로 변환합니다.

class Program
{
  static void Main(string[] args)
  {
    int[] intArray = { 1, 2, 3, 4, 5 };

    // 순서 1. List로 변환합니다.
    List<int> intList = new List<int>(intArray);

    Console.WriteLine("[삭제 전]");
    foreach(int num in intArray)
    {
      Console.Write(num + " ");
    }

    // 순서 2. List의 마지막 요소를 제거합니다.
    if (intList != null && intList.Count > 0)
    {
      intList.RemoveAt(intList.Count - 1);
    }

    // 순서 3. List를 다시 배열로 변환합니다.
    intArray = intList.ToArray();

    Console.WriteLine("\n");
    Console.WriteLine("[삭제 후]");
    foreach (int num in intArray)
    {
      Console.Write(num + " ");
    }
  }
}

[실행 결과]

[삭제 전]
1 2 3 4 5

[삭제 후]
1 2 3 4

방법 2. Array 클래스의 Resize 메서드

두 번째 방법으로 Array 클래스에서 제공하는 Resize() 메서드를 사용합니다.

 

Resize() 메서드는 배열의 크기를 조정합니다.

 

첫 번째 매개변수에 ref 키워드와 함께 원본 배열을 전달하고 두 번째 매개변수에 조정하고 싶은 크기를 전달합니다.

class Program
{
  static void Main(string[] args)
  {
    int[] intArray = { 1, 2, 3, 4, 5 };

    Console.WriteLine("[삭제 전]");
    foreach(int num in intArray)
    {
      Console.Write(num + " ");
    }

    if (intArray != null && intArray.Length > 0)
    {
      Array.Resize(ref intArray, intArray.Length - 1);
    }

    Console.WriteLine("\n");
    Console.WriteLine("[삭제 후]");
    foreach (int num in intArray)
    {
      Console.Write(num + " ");
    }
  }
}

[실행 결과]

[삭제 전]
1 2 3 4 5

[삭제 후]
1 2 3 4

방법 3. LINQ의 Take 메서드

세 번째 방법으로 LINQ에서 제공하는 Take() 메서드를 사용하여 마지막 요소가 제거된 새로운 배열을 생성할 수 있습니다.

 

먼저, LINQ에서 제공하는 기능을 사용하기 위해 다음 네임스페이스를 추가합니다.

using System.Linq;

Take() 메서드는 배열 또는 컬렉션과 같은 데이터 집합에서 특정 개수만큼 데이터를 가져옵니다.

public static IEnumerable<TSource> Take<TSource>(this IEnumerable<TSource> source, int count);

 

[제거 방법]

순서 1. (배열 요소의 개수 - 1)을 Take() 메서드의 매개변수로 전달합니다.

순서 2. ToArray() 메서드를 호출하여 Take() 메서드의 반환 결과를 배열로 변환합니다.

class Program
{
  static void Main(string[] args)
  {
    int[] intArray = { 1, 2, 3, 4, 5 };

    Console.WriteLine("[삭제 전]");
    foreach(int num in intArray)
    {
      Console.Write(num + " ");
    }

    if (intArray != null && intArray.Length > 0)
    {
      intArray = intArray.Take(intArray.Length - 1).ToArray();
    }

    Console.WriteLine("\n");
    Console.WriteLine("[삭제 후]");
    foreach (int num in intArray)
    {
      Console.Write(num + " ");
    }
  }
}

[실행 결과]

[삭제 전]
1 2 3 4 5

[삭제 후]
1 2 3 4

LINQ에서 제공하는 Take() 메서드에 대한 세부적인 내용은 아래 포스팅에서 확인할 수 있습니다.

 

[C#]LINQ 특정 개수만큼 데이터 가져오기 - Take 메서드

Take 메서드 C#의 Linq는 데이터 집합에서 특정 개수만큼 데이터를 가져오는 Take() 메서드를 제공합니다. 데이터 집합의 처음 위치에서 n개의 데이터를 가져오며, 특정 개수는 Take() 메서드의 매개변

developer-talk.tistory.com


방법 4. LINQ의 SkipLast 메서드

마지막 방법으로 LINQ에서 제공하는 SkipLast() 메서드를 사용하여 마지막 요소가 제거된 새로운 배열을 생성할 수 있습니다.

 

SkipLast() 메서드는 데이터 집합 뒤에서 특정 개수의 데이터가 생략된 새로운 데이터 집합을 생성합니다.

public static IEnumerable<TSource> SkipLast<TSource>(
  this IEnumerable<TSource> source, int count);

 

[제거 방법]

순서 1. SkipLast() 메서드의 매개변수로 1을 전달합니다.

순서 2. ToArray() 메서드를 호출하여 SkipLast() 메서드의 반환 결과를 배열로 변환합니다.

class Program
{
  static void Main(string[] args)
  {
    int[] intArray = { 1, 2, 3, 4, 5 };

    Console.WriteLine("[삭제 전]");
    foreach(int num in intArray)
    {
      Console.Write(num + " ");
    }

    if (intArray != null && intArray.Length > 0)
    {
      intArray = intArray.SkipLast(1).ToArray();
    }

    Console.WriteLine("\n");
    Console.WriteLine("[삭제 후]");
    foreach (int num in intArray)
    {
      Console.Write(num + " ");
    }
  }
}

[실행 결과]

[삭제 전]
1 2 3 4 5

[삭제 후]
1 2 3 4
반응형

댓글