C# 배열 비우기 - Array.Clear, Array.Copy, Array.Resize 이용
우리들은 배열을 비우고자 한다.
byte[] recvData = new byte[10];
위와 같이 배열을 구성하고
뒤에 사이즈를 넣어주게 된다.
"이 배열은 이만큼만 쓸 것입니다"라는 의미이다.
거기에 0부터 9까지 byte를 넣었다고 생각해보자.
(int[]로 해도 됨)
그리고 01234 숫자를 없애고 싶다면 어떻게 할 것인가?
Array.Clear(recvData, 0, 5); //(배열, 시작 인덱스, 시작 인덱스 부터 지울 길이)
위와 같은 C#의 Array 클래스에 있는 Clear 함수를 사용 할 수 있을 것이다.
하지만 recvData 를 내부를 보면
0000056789 의 byte 가 들어있다.
그게 아니라 앞에 지운것은 다 없애고
56789 만 남게 하고 싶다면 어떻게 해야 하겠는가?
Array.Clear(recvData, 0, 5);
int count = 0;
for (int i = 0; i < recvData.Length; ++i)
{
if (recvData[i] == '\0')
{
++count;
}
else break;
}
byte[] recvData2 = new byte[recvData.Length - count];
Array.Copy(recvData, count, recvData2, 0, recvData2.Length); // (원본배열, 옮길 인덱스 시작 위치, 복사본 배열, 복사될 시작위치, 복사될 길이)
편리한 함수가 따로 있지 않은 것 같다.
(내가 못찾은 것일 수도 있다.)
위와 같이 '\0'이 들어간 부분을 카운트 하여 앞에서부터 길이를 재고
Array.Copy 로 다른 배열로 옮기는 것이다.
그러면 뒤에서 부터 잘라 올 수 있다.
그럼 반대로 뒤에를 날리고 앞에꺼만 보존 하여
배열 사이즈를 맞춘다면 어떻게 할까?
Array.Resize(ref recvData, recvData.Length - eraseLength); // (원본 배열 ref 꼭 붙여야 함(참조의 의미), 재조정할 사이즈)
위와 같은 Resize함수를 사용해주면
사이즈를 재조정해주면서
뒤를 없앨 수 있다.
위의 함수 들을 복합적으로 사용하면
중간 중간에 비어있는 값들도 뺄 수 있게 되니
잘 처리해보도록 하자
'공부 > C#' 카테고리의 다른 글
연산자 오버로딩(==, !=) (0) | 2017.05.12 |
---|---|
C#에서의 상수 사용 - c++의 #define 같은 활용 방안 (0) | 2016.06.16 |
C# 람다 식 (0) | 2016.06.08 |
C# Windows Forms - 오목 (0) | 2016.05.31 |
소켓 통신, 웹 통신(간략 설명, 메모) (0) | 2016.05.28 |