C# 에서의 배열 복사를 알아볼 것 입니다.

배열 복사를 할 땐 항상 배열의 인덱스의 범위를 벗어나서 복사 하지 않는지 주의해야합니다.


1. Array.CopyTo(Array destArray, int index) 

// srcArray의 데이터를 인자로 전달한 destArray에 저장합니다.

// destArray의 마지막 인자의 인덱스 부터 저장됩니다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
byte[] sourceArray = new byte[10]; // 복사를 할 배열입니다.
byte[] destinationArray = new byte[10]; // 복사를 당할 배열입니다.
 
// 복사 할 배열의 데이터를 삽입 합니다.
for (int i = 0; i < 10++i)
    sourceArray[i] = (byte)i;
 
// 복사하기전 복사를 당할 배열의 데이터를 출력해봅니다.
for (int i = 0; i < 10++i)
    Console.Write($"{destinationArray[i]} ");
// 출력 결과 : 0 0 0 0 0 0 0 0 0 0
 
// 복사합니다.
// 복사를 당할 배열, 복사할 크기 (index의 갯수)
sourceArray.CopyTo(destinationArray, 0);
 
Console.WriteLine();
 
// 복사한 후 복사를 당할 배열의 데이터를 출력해봅니다.
for (int i = 0; i < 10++i)
    Console.Write($"{destinationArray[i]} ");
// 출력 결과 : 0 1 2 3 4 5 6 7 8 9
 
Console.WriteLine();
 
cs


2. Array.Copy(Array srcArray, int srcCopyStartIndex, Array destArray, int destCopyStartIndex, int CopyLength)

// 예) srcArray[srcCopyStartIndex]에서 부터 CopyLength 까지 destArray에 복사합니다.

// destArray의 destCopyStartIndex부터 저장합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
byte[] sourceArray = new byte[10]; // 복사를 할 배열입니다.
byte[] destinationArray = new byte[10]; // 복사를 당할 배열입니다.
 
// 복사 할 배열의 데이터를 삽입 합니다.
for (int i = 0; i < 10++i)
    sourceArray[i] = (byte)i;
 
// 복사하기전 복사를 당할 배열의 데이터를 출력해봅니다.
for (int i = 0; i < 10++i)
    Console.Write($"{destinationArray[i]} ");
// 출력 결과 : 0 0 0 0 0 0 0 0 0 0
 
/* 복사합니다.
복사할 배열, 복사할 배열의 복사가 시작되는 위치,
복사를 당할 배열, 복사를 당할 배열의 저장 시작 위치,
크기 (index 갯수)
*/
Array.Copy(sourceArray, 0, destinationArray, 010);
Console.WriteLine();
 
// 복사한 후 복사를 당할 배열의 데이터를 출력해봅니다.
for (int i = 0; i < 10++i)
    Console.Write($"{destinationArray[i]} " );
// 출력 결과 : 0 1 2 3 4 5 6 7 8 9
 
Console.WriteLine();
 
cs


3. Array.Clone()

// 이 함수는 복사할 배열과 똑같은 복사본을 만듭니다. 할당도 알아서해줍니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
byte[] sourceArray = new byte[10]; // 복사를 할 배열입니다.
 
// 복사 할 배열의 데이터를 삽입 합니다.
for (int i = 0; i < 10++i)
    sourceArray[i] = (byte)i;
 
// sourceArray의 복사본을 똑같이 만듭니다. 할당도 알아서 해줍니다.
byte[] destinationArray = sourceArray.Clone() as byte[];
 
// 복사한 후 복사를 당할 배열의 데이터를 출력해봅니다.
for (int i = 0; i < 10++i)
    Console.Write($"{destinationArray[i]} ");
// 출력 결과 : 0 1 2 3 4 5 6 7 8 9
 
Console.WriteLine();
 
cs


4. Buffer.BlockCopy(Array srcArray, int srcOffset, Array destArray, int destOffset, int Length);

// Offset : 시작 위치입니다. 어디서부터 복사할지 결정 할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
byte[] sourceArray = new byte[10]; // 복사를 할 배열입니다.
byte[] destinationArray = new byte[10]; // 복사를 당할 배열입니다.
 
// 복사 할 배열의 데이터를 삽입 합니다.
for (int i = 0; i < 10++i)
    sourceArray[i] = (byte)i;
 
// 복사하기전 복사를 당할 배열의 데이터를 출력해봅니다.
for (int i = 0; i < 10++i)
    Console.Write($"{destinationArray[i]} ");
// 출력 결과 : 0 0 0 0 0 0 0 0 0 0
 
/* 복사합니다. 
인자 (복사 할 배열, 복사할 배열의 복사 시작 위치, 복사를 당할 배열, 
복사를 당할 배열의 복사 시작 위치, 복사할 사이즈(인덱스의 갯수))*/
Buffer.BlockCopy(sourceArray, 0, destinationArray, 010);
 
Console.WriteLine();
 
// 복사한 후 복사를 당할 배열의 데이터를 출력해봅니다.
for (int i = 0; i < 10++i)
    Console.Write($"{destinationArray[i]} ");
// 출력 결과 : 0 1 2 3 4 5 6 7 8 9
 
Console.WriteLine();
 
cs


틀린 부분이 있을 수도 있습니다. 댓글로 알려주세요

+ Recent posts