C #에서 배열의 일부를 다른 배열로 복사하는 방법은 무엇입니까?


144

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

내가 가지고 있다고 생각

int[] a = {1,2,3,4,5};

이제 배열의 시작 색인과 종료 색인을 지정하면 a다른 배열로 복사되어야합니다.

시작 색인을 1로 지정하고 종료 색인을 3으로 지정하면 요소 2, 3, 4가 새 배열에 복사되어야합니다.

답변:


273
int[] b = new int[3];
Array.Copy(a, 1, b, 0, 3);
  • a = 소스 배열
  • 1 = 소스 배열에서 인덱스 시작
  • b = 대상 배열
  • 0 = 대상 배열의 시작 색인
  • 3 = 복사 할 요소

7
현재 사용 가능한 명명 된 매개 변수를 사용하면 5 개의 매개 변수를 문서화 할 필요가 없습니다.
Hamish Grubijan

11
@ 해미 쉬, 아마도. 개인적으로 코드를 명확하게 만들지 않으면 명시 적 이름을 추가하지 않을 것입니다.이 경우 매개 변수 이름 자체 가 그렇게 될지 확실하지 않습니다 .
Marc Gravell


3
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 배열에 복사합니다.

한 어레이에서 다른 어레이로 복사하는 동안 복사하려는 다른 어레이에 동일한 데이터 유형을 제공해야합니다.


1

참고 :이 질문 은 기존 배열의 크기조정 하는 방법에 대한 답변의 단계 중 하나를 찾고 있습니다.

그래서 다른 사람이 배열 크기 조정 문제에 대한 부분 답변으로 원거리 복사를 수행하는 방법을 찾고있는 경우 여기에 해당 정보를 추가 할 것이라고 생각했습니다.

내가했던 것과 똑같은 것을 찾는이 질문을 찾는 사람은 매우 간단합니다.

Array.Resize<T>(ref arrayVariable, newSize);

여기서 T 는 유형입니다. 즉, arrayVariable이 선언됩니다.

T[] arrayVariable;

이 메서드는 null 검사뿐만 아니라 newSize == oldSize도 적용되지 않으며, 배열 중 하나가 다른 배열보다 긴 경우를 자동으로 처리합니다.

자세한 내용 은 MSDN 기사 를 참조하십시오 .


0

자신의 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();
            }
        }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.