C #에서 배열의 일부를 다른 배열로 복사하는 방법은 무엇입니까? 시작 색인과 종료

배열의 일부를 다른 배열로 복사하려면 어떻게해야합니까?

내가 가지고 있다고 생각

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();
            }
        }