특정 조건에 맞는 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]);
}
거꾸로 순회하면서 제거하면 안전하게 작업을 수행할 수 있다.
'유니티 > 버그일지' 카테고리의 다른 글
[Unity] Collider의 Trigger 관련 버그 (0) | 2020.05.18 |
---|---|
[Unity] OnDestroy에 처리할 내용은 다른 함수에 (0) | 2020.05.18 |
Trigger가 발동되지 않는 경우 (0) | 2020.03.27 |
[Unity]에디터 확장한 프로젝트가 빌드 실패할 때 (2) | 2020.02.26 |
[Unity]error: 프리팹의 parent 변경할 때 실수 조심 (4) | 2019.10.20 |