배열의 일부를 다른 배열로 복사하려면 어떻게해야합니까?
내가 가지고 있다고 생각
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);
- a = 소스 배열
- 1 = 소스 배열에서 인덱스 시작
- b = 대상 배열
- 0 = 대상 배열의 시작 색인
- 3 = 복사 할 요소
답변
이 질문을 참조하십시오 . LINQ Take () 및 Skip ()은 Array.CopyTo ()뿐만 아니라 가장 많이 사용되는 답변입니다.
보다 빠른 확장 방법이 여기에 설명되어 있습니다 .
답변
int[] a = {1,2,3,4,5};
int [] b= new int[a.length]; //New Array and the size of a which is 4
Array.Copy(a,b,a.length);
여기서 Array는 Copy의 메소드를 갖는 클래스이며, 이는 배열의 요소를 b 배열에 복사합니다.
한 어레이에서 다른 어레이로 복사하는 동안 복사하려는 다른 어레이에 동일한 데이터 유형을 제공해야합니다.
답변
참고 :이 질문 은 기존 배열의 크기 를 조정 하는 방법에 대한 답변의 단계 중 하나를 찾고 있습니다.
그래서 다른 사람이 배열 크기 조정 문제에 대한 부분 답변으로 원거리 복사를 수행하는 방법을 찾고있는 경우 여기에 해당 정보를 추가 할 것이라고 생각했습니다.
내가했던 것과 똑같은 것을 찾는이 질문을 찾는 사람은 매우 간단합니다.
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();
}
}