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, 0, 10); 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, 0, 10); 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 |
틀린 부분이 있을 수도 있습니다. 댓글로 알려주세요
'programing > C# Programming' 카테고리의 다른 글
C#Programming - Delegate (0) | 2019.10.07 |
---|---|
C#Programming - C#의 예외처리(exception) (0) | 2019.09.23 |
C# Programming - C#에서의 배열 부분 참조. (0) | 2019.09.20 |