Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 RemoveAll()로 술어(Predicate) 조건에 일치하는 리스트 요소 모두 제거하기

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이 반환됩니다.