본문 바로가기
유니티/버그일지

[C#][Unity]List에서 원소 제거시 주의할 점

by 개발펭귄 2020. 4. 7.

특정 조건에 맞는 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]);
}

거꾸로 순회하면서 제거하면 안전하게 작업을 수행할 수 있다.