배열의 일부를 다른 배열로 복사하려면 어떻게해야합니까?
내가 가지고 있다고 생각
int[] a = {1,2,3,4,5};
이제 배열의 시작 색인과 종료 색인을 지정하면 a
다른 배열로 복사되어야합니다.
시작 색인을 1로 지정하고 종료 색인을 3으로 지정하면 요소 2, 3, 4가 새 배열에 복사되어야합니다.
배열의 일부를 다른 배열로 복사하려면 어떻게해야합니까?
내가 가지고 있다고 생각
int[] a = {1,2,3,4,5};
이제 배열의 시작 색인과 종료 색인을 지정하면 a
다른 배열로 복사되어야합니다.
시작 색인을 1로 지정하고 종료 색인을 3으로 지정하면 요소 2, 3, 4가 새 배열에 복사되어야합니다.
답변:
int[] b = new int[3];
Array.Copy(a, 1, b, 0, 3);
이 질문을 참조하십시오 . LINQ Take () 및 Skip ()은 Array.CopyTo ()뿐만 아니라 가장 많이 사용되는 답변입니다.
보다 빠른 확장 방법이 여기에 설명되어 있습니다 .
참고 :이 질문 은 기존 배열의 크기 를 조정 하는 방법에 대한 답변의 단계 중 하나를 찾고 있습니다.
그래서 다른 사람이 배열 크기 조정 문제에 대한 부분 답변으로 원거리 복사를 수행하는 방법을 찾고있는 경우 여기에 해당 정보를 추가 할 것이라고 생각했습니다.
내가했던 것과 똑같은 것을 찾는이 질문을 찾는 사람은 매우 간단합니다.
Array.Resize<T>(ref arrayVariable, newSize);
여기서 T 는 유형입니다. 즉, arrayVariable이 선언됩니다.
T[] arrayVariable;
이 메서드는 null 검사뿐만 아니라 newSize == oldSize도 적용되지 않으며, 배열 중 하나가 다른 배열보다 긴 경우를 자동으로 처리합니다.
자세한 내용 은 MSDN 기사 를 참조하십시오 .
자신의 Array.Copy 메서드 를 구현하려는 경우 .
제네릭 형식의 정적 메서드입니다.
static void MyCopy<T>(T[] sourceArray, long sourceIndex, T[] destinationArray, long destinationIndex, long copyNoOfElements)
{
long totaltraversal = sourceIndex + copyNoOfElements;
long sourceArrayLength = sourceArray.Length;
//to check all array's length and its indices properties before copying
CheckBoundaries(sourceArray, sourceIndex, destinationArray, copyNoOfElements, sourceArrayLength);
for (long i = sourceIndex; i < totaltraversal; i++)
{
destinationArray[destinationIndex++] = sourceArray[i];
}
}
경계 방법 구현.
private static void CheckBoundaries<T>(T[] sourceArray, long sourceIndex, T[] destinationArray, long copyNoOfElements, long sourceArrayLength)
{
if (sourceIndex >= sourceArray.Length)
{
throw new IndexOutOfRangeException();
}
if (copyNoOfElements > sourceArrayLength)
{
throw new IndexOutOfRangeException();
}
if (destinationArray.Length < copyNoOfElements)
{
throw new IndexOutOfRangeException();
}
}