C#/배열

[C#]배열 특정 인덱스부터 자르는 방법

DevStory 2022. 9. 1.

배열 특정 인덱스부터 자르는 방법

이번 포스팅은 C#에서 특정 인덱스부터 배열을 자르는 몇 가지 방법을 소개합니다.


방법 1. Array 클래스의 Copy 메서드

Array 클래스에서 제공하는 Copy() 메서드를 사용하여 배열 인덱스 범위에 해당하는 값을 다른 배열에 할당할 수 있습니다.

public static void Copy(
  Array sourceArray, int sourceIndex, 
  Array destinationArray, int destinationIndex, 
  int length);

Copy() 메서드는 원본 배열(sourceArray)의 특정 위치(sourceIndex)부터 특정 개수(length)의 요소를 새로운 배열(destinationArray)의 특정 위치(destinationIndex)에 할당합니다.

 

다음 예제는 int 타입인 배열의 2번째 인덱스부터 3개의 요소를 새로운 배열에 할당합니다.

class Program
{
  public static T[] SplitArray<T>(T[] array, int startIndex, int length)
  {
    T[] result = new T[length];
    Array.Copy(array, startIndex, result, 0, length);
    return result;
  }

  static void Main(string[] args)
  {
    int[] intArray = { 0, 10, 20, 30, 40, 50, 60 };
    int[] newArray = SplitArray(intArray, 2, 3);

    Console.WriteLine("newArray: " + string.Join(", ", newArray));
  }
}

[실행 결과]

newArray: 20, 30, 40

방법 2. LINQ의 Skip, Take 메서드

두 번째 방법으로 LINQ에서 제공하는 Skip() 메서드와 Take() 메서드를 사용합니다.

 

먼저, LINQ에서 제공하는 Skip() 메서드와 Take() 메서드를 사용하기 위해 다음 네임스페이스를 추가합니다.

using System.Linq;

 

Skip() 메서드는 매개변수로 전달된 값만큼 위치를 건너뜁니다.

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

다음 예제처럼 Skip() 메서드에 매개변수로 2를 전달하면, 2번째 인덱스부터 나머지 값을 반환합니다.

int[] intArray = { 0, 10, 20, 30, 40, 50, 60 };
int[] newArray = intArray.Skip(2).ToArray();

Console.WriteLine("newArray: " + string.Join(", ", newArray));

[실행 결과]

newArray: 20, 30, 40, 50, 60

 

Take() 메서드는 전달된 값만큼 요소를 가져옵니다. 매개변수로 3을 전달하면 3개의 요소를 가져옵니다.

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

 

다음 예제는 Skip() 메서드와 Take() 메서드를 사용하여 배열의 2번째 인덱스부터 3개의 요소를 가져옵니다.

class Program
{
  static void Main(string[] args)
  {
    int[] intArray = { 0, 10, 20, 30, 40, 50, 60 };
    int[] newArray = intArray.Skip(2).Take(3).ToArray();

    Console.WriteLine("newArray: " + string.Join(", ", newArray));
  }
}

[실행 결과]

newArray: 20, 30, 40

방법 3. ArraySegment<T> 구조체

세 번째 방법으로 ArraySegement<T> 구조체를 사용합니다.

public ArraySegment(T[] array, int offset, int count);

ArraySegment 생성자에 원본 배열(array), 원본 배열의 시작 위치(offset), 가져올 요소의 개수(count)를 전달합니다.

 

다음 예제는 ArraySegment<T> 구조체를 사용하여 배열의 2번째 인덱스부터 3개의 요소를 가져옵니다.

class Program
{
  static void Main(string[] args)
  {
    int[] intArray = { 0, 10, 20, 30, 40, 50, 60 };
    int[] newArray = new ArraySegment<int>(intArray, 2, 3).ToArray();

    Console.WriteLine("newArray: " + string.Join(", ", newArray));
  }
}

[실행 결과]

newArray: 20, 30, 40

방법 4. List의 GetRange 메서드

마지막 방법으로 List 클래스의 GetRange() 메서드를 사용할 수 있습니다.

public List<T> GetRange(int index, int count);

GetRange() 메서드는 특정 위치(index)부터 개수(count)만큼 요소를 가져옵니다.

 

GetRange() 메서드를 사용하기 위해 배열을 List로 변환 후 GetRange() 메서드를 호출합니다. GetRange() 메서드는 List를 반환하므로 다시 배열로 변환합니다.

 

다음 예제는 배열을 List로 변환 후 GetRange() 메서드를 사용하여 배열의 2번째 인덱스부터 3개의 요소를 가져옵니다.

class Program
{
  static void Main(string[] args)
  {
    int[] intArray = { 0, 10, 20, 30, 40, 50, 60 };
    int[] newArray = intArray.ToList()       // List로 변환
                             .GetRange(2, 3) // 특정 위치부터 특정 개수만큼 요소를 가져옴
                             .ToArray();     // List를 배열로 변환

    Console.WriteLine("newArray: " + string.Join(", ", newArray));
  }
}

[실행 결과]

newArray: 20, 30, 40
반응형

댓글