-
[유니티] 리스트 foreach에서 제거하기 - list for foreach remove유니티 2023. 10. 16. 17:27
foreach내에서 Remove가 안되는 이유
List<int> nums; void Start() { nums = new List<int> { 1, 2, 3, 4 }; foreach (int num in nums) { nums.Remove(num); } }
리스트를 for나 foreach같은 반복문 내에서 Remove로 제거하려고 하면
InvalidOperationException: Collection was modified 으로 에러가 뜹니다.
foreach 문 안에서 순회하는 원본을 제거하면 안되는 건데요.
중간에 제거해버리면 리스트의 크기가 변하면서 인덱스가 앞으로 당겨와지기 때문입니다.
List<int> nums; void Start() { nums = new List<int> { 1, 2, 3, 4 }; List<int> removeNums = new(); foreach (var num in nums) { if (num == 2 || num == 3) removeNums.Add(num); } nums.RemoveAll(x => removeNums.Contains(x)); }
foreach 내에서 제거하고 싶은 것만 지울 리스트에 담아둔 뒤 RemoveAll로 한꺼번에 제거합니다.
'유니티' 카테고리의 다른 글
[유니티] 옵저버 패턴 (Observer Pattern) - 디자인 패턴 (2) 2023.10.18 [유니티] Enum을 플래그 (Flag)로 만들어 다중선택 판단하기 (0) 2023.10.17 [유니티][에셋] 로그 뷰어 (Log Viewer)로 빌드시 로그 확인하기 (2) 2023.09.21 [유니티][에셋] 이지세이브 (Easy Save) 로 진짜 쉽게 데이터 저장 (0) 2023.09.21 [유니티] 모바일 기기 시뮬레이터로 다양한 해상도 대응하기 (2) 2023.09.07