C#에서 List<T>의 RemoveAll() 메서드를 사용하면, 술어(Predicate)가 정의한 조건과 일치하는 모든 요소를 한 번에 제거할 수 있습니다. 이 메서드는 Predicate<T> 대리자를 인수로 받으며, 조건이 참(true)을 반환하는 모든 요소를 리스트에서 삭제하고, 실제로 제거된 요소의 개수를 반환합니다.
예제 1: 특정 값(500)과 일치하는 요소 제거
다음은 리스트에서 값이 500인 요소를 모두 제거하는 예제입니다.
using System;
using System.Collections.Generic;
public class Demo {
private static bool demo(int i){
return (i == 500);
}
public static void Main(String[] args){
List<int> list = new List<int>();
list.Add(100);
list.Add(500);
list.Add(300);
list.Add(400);
list.Add(500);
list.Add(600);
list.Add(500);
Console.WriteLine("List elements...");
foreach (int i in list){
Console.WriteLine(i);
}
Console.WriteLine(" ");
list.RemoveAll(demo);
Console.WriteLine("List after removing elements 500...");
foreach (int i in list){
Console.WriteLine(i);
}
}
}출력 결과
List elements... 100 500 300 400 500 600 500 List after removing elements 500... 100 300 400 600
위 코드에서 demo라는 이름의 술어 메서드는 매개변수로 받은 정수가 500과 같은지 확인하여 true 또는 false를 반환합니다. RemoveAll()이 실행되면 이 조건을 만족하는 세 개의 500이 모두 리스트에서 제거됩니다.
예제 2: 10으로 나누어 떨어지는 요소 제거
이번에는 조금 다른 조건을 적용해 보겠습니다. 아래 예제는 10으로 나누어 떨어지는(즉, 일의 자리가 0인) 모든 요소를 제거합니다.
using System;
using System.Collections.Generic;
public class Demo {
private static bool demo(int i){
return ((i % 10) == 0);
}
public static void Main(String[] args){
List<int> list = new List<int>();
list.Add(100);
list.Add(295);
list.Add(355);
list.Add(450);
list.Add(550);
Console.WriteLine("List elements...");
foreach (int i in list){
Console.WriteLine(i);
}
Console.WriteLine(" ");
list.RemoveAll(demo);
Console.WriteLine("List after removing elements...");
foreach (int i in list){
Console.WriteLine(i);
}
}
}출력 결과
List elements... 100 295 355 450 550 List after removing elements... 295 355
핵심 정리
RemoveAll(Predicate<T>)는 조건을 만족하는 모든 요소를 한 번에 제거하며, 제거된 요소의 개수를 반환합니다.- 술어는 별도의 메서드뿐만 아니라 람다 식(예:
list.RemoveAll(i => i == 500);)으로도 간결하게 작성할 수 있습니다. - 조건을 만족하는 요소가 하나도 없으면 아무것도 제거되지 않고 0이 반환됩니다.