배열 특정 인덱스부터 자르는 방법
이번 포스팅은 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
'C# > 배열' 카테고리의 다른 글
[C#]배열의 크기를 변경하는 방법 (0) | 2022.09.13 |
---|---|
[C#]배열 콘솔에 출력하는 방법 (0) | 2022.09.01 |
[C#]배열 마지막 요소 제거하는 방법 (0) | 2022.08.28 |
[C#]배열 복사하는 방법 (0) | 2022.08.23 |
[C#]배열의 타입을 변경하는 방법 (0) | 2022.08.18 |
댓글