Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 CopyTo() 메서드로 ArrayList 전체를 1차원 배열의 지정된 인덱스부터 복사하는 방법

ArrayList에 저장된 모든 요소를 1차원 배열의 특정 인덱스 위치부터 복사하려면 CopyTo() 메서드를 사용합니다. 이 메서드는 CopyTo(Array, Int32) 형태로 호출되며, 첫 번째 매개변수에는 복사 대상이 되는 1차원 배열을, 두 번째 매개변수에는 복사가 시작될 배열의 인덱스를 전달합니다.

복사 작업이 완료되면 원본 ArrayList의 요소들이 대상 배열의 지정된 위치부터 순서대로 덮어쓰기 됩니다. 단, 대상 배열의 크기가 복사할 요소 수보다 작으면 예외가 발생하므로 주의해야 합니다.

예제 1: 문자열 배열에 복사하기

다음 예제에서는 문자열 요소 6개를 가진 ArrayList를 동일한 크기의 문자열 배열에 인덱스 0부터 복사합니다.

using System;
using System.Collections;
public class Demo {
    public static void Main(){
        ArrayList list = new ArrayList();
        list.Add("PQ");
        list.Add("RS");
        list.Add("TU");
        list.Add("UV");
        list.Add("WX");
        list.Add("YZ");
        Console.WriteLine("ArrayList elements...");
        for (int i = 0; i < list.Count; i++) {
            Console.WriteLine(list[i]);
        }
        String[] strArr = new String[6] {"One", "Two", "Three", "Four", "Five", "Six"};
        Console.WriteLine("\nArray elements...");
        for (int i = 0; i < strArr.Length; i++) {
            Console.WriteLine(strArr[i]);
        }
        list.CopyTo(strArr, 0);
        Console.WriteLine("\nArray elements (updated)...");
        for (int i = 0; i < strArr.Length; i++) {
            Console.WriteLine(strArr[i]);
        }
    }
}

실행 결과

위 코드를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.

ArrayList elements...
PQ
RS
TU
UV
WX
YZ

Array elements...
One
Two
Three
Four
Five
Six

Array elements (updated)...
PQ
RS
TU
UV
WX
YZ

출력 결과를 보면 CopyTo(strArr, 0) 호출 후 배열의 기존 값(One~Six)이 ArrayList의 요소들(PQ~YZ)로 완전히 대체된 것을 확인할 수 있습니다.

예제 2: 정수 배열에 부분적으로 복사하기

이번에는 요소 개수가 서로 다른 경우를 살펴보겠습니다. 요소가 2개인 ArrayList를 크기가 5인 정수 배열에 복사하면, 나머지 위치의 기존 값은 그대로 유지됩니다.

using System;
using System.Collections;
public class Demo {
    public static void Main(){
        ArrayList list = new ArrayList();
        list.Add(100);
        list.Add(200);
        Console.WriteLine("ArrayList elements...");
        for (int i = 0; i < list.Count; i++) {
            Console.WriteLine(list[i]);
        }
        int[] intArr = new int[5] {10, 20, 30, 40, 50};
        Console.WriteLine("\nArray elements...");
        for (int i = 0; i < intArr.Length; i++) {
            Console.WriteLine(intArr[i]);
        }
        list.CopyTo(intArr, 0);
        Console.WriteLine("\nArray elements (updated)...");
        for (int i = 0; i < intArr.Length; i++) {
            Console.WriteLine(intArr[i]);
        }
    }
}

실행 결과

ArrayList elements...
100
200

Array elements...
10
20
30
40
50

Array elements (updated)...
100
200
30
40
50

위 결과에서 알 수 있듯이, ArrayList의 두 요소(100, 200)가 배열의 앞부분만 덮어쓰고, 인덱스 2 이후의 기존 값(30, 40, 50)은 변경되지 않은 채 유지됩니다.

정리

  • CopyTo(Array, Int32)ArrayList의 전체 요소를 지정한 인덱스부터 1차원 배열로 복사합니다.
  • 대상 배열의 남은 공간이 복사할 요소 수보다 적으면 ArgumentException 또는 ArgumentOutOfRangeException이 발생할 수 있습니다.
  • 배열이 null이면 ArgumentNullException, 다차원 배열이면 ArgumentException이 발생합니다.
  • 요소 개수가 배열보다 적으면 나머지 배열 요소는 원래 값 그대로 유지됩니다.