유니티/버그일지
[C#][Unity]List에서 원소 제거시 주의할 점
개발펭귄
2020. 4. 7. 14:41
특정 조건에 맞는 LIst 안의 원소를 제거할 때, 별 생각없이 이렇게 할 때가 있다.
for(int i = 0; i < myList.Count; i++)
{
if(조건이 참일 때)
myList.Remove(myList[i]);
}
배열이 됐든 무엇이든 순회하는 과정에서 컨테이너의 내용이 변경되는 것은 위험한 작업일 수 있다.
위 코드도 중간에 어떤 값이 제거되면, list의 사이즈 역시 변경되어 잘못된 인덱스에 접근할 가능성이 매우 높다.
이럴 때는 다음과 같이 사용하자.
for(int i = myList.Count - 1; i >= 0; i--)
{
if(조건이 참이면)
myList.Remove(myList[i]);
}
거꾸로 순회하면서 제거하면 안전하게 작업을 수행할 수 있다.