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

C#에서 조건자(Predicate)로 지정한 조건과 일치하는 리스트의 모든 요소 가져오기 – FindAll 완벽 가이드

C#에서 List에 담긴 여러 요소 중 특정 조건을 만족하는 값들만 골라내고 싶다면, List<T> 클래스가 제공하는 FindAll() 메서드를 사용하면 됩니다.

FindAll() 메서드는 Predicate<T>(조건자) 델리게이트를 인수로 받으며, 조건이 참(true)인 모든 요소를 담은 새로운 List<T>를 반환합니다. 조건에 맞는 요소가 하나도 없으면 빈 리스트가 반환됩니다.

예제 1: 3의 배수 찾기

아래 예제에서는 정수 리스트에서 3으로 나누어 떨어지는(3의 배수) 요소만 추출합니다.

using System;
using System.Collections.Generic;

public class Demo {
   private static bool demo(int i) {
      return ((i % 3) == 0);
   }

   public static void Main(String[] args) {
      List<int> list = new List<int>();
      list.Add(9);
      list.Add(15);
      list.Add(20);
      list.Add(40);
      list.Add(50);
      list.Add(60);

      Console.WriteLine("List elements...");
      foreach (int i in list) {
         Console.WriteLine(i);
      }

      Console.WriteLine(" ");

      // 조건자(demo)와 일치하는 모든 요소를 새 리스트로 반환
      List<int> res = new List<int>(list.FindAll(demo));

      Console.WriteLine("List that match the conditions...");
      foreach (int i in res) {
         Console.WriteLine(i);
      }
   }
}

출력 결과

List elements...
9
15
20
40
50
60

List that match the conditions...
9
15
60

실행 결과를 보면 전체 6개 요소 중 9, 15, 60만 3의 배수 조건을 만족하여 새 리스트에 담긴 것을 확인할 수 있습니다.

예제 2: 나머지 연산으로 특정 패턴 찾기

이번에는 100으로 나눈 나머지가 5인 수를 찾는 조건을 적용해 보겠습니다.

using System;
using System.Collections.Generic;

public class Demo {
   private static bool demo(int i) {
      return ((i % 100) == 5);
   }

   public static void Main(String[] args) {
      List<int> list = new List<int>();
      list.Add(900);
      list.Add(1500);
      list.Add(250);
      list.Add(405);

      Console.WriteLine("List elements...");
      foreach (int i in list) {
         Console.WriteLine(i);
      }

      Console.WriteLine(" ");

      List<int> res = new List<int>(list.FindAll(demo));

      Console.WriteLine("List that match the conditions...");
      foreach (int i in res) {
         Console.WriteLine(i);
      }
   }
}

출력 결과

List elements...
900
1500
250
405

List that match the conditions...
405

네 개의 요소 중 405만 “100으로 나눈 나머지가 5”라는 조건을 충족하므로, 결과 리스트에는 405 하나만 포함됩니다.

람다 식으로 더 간결하게 작성하기

별도의 메서드를 선언하지 않고 람다 식(lambda expression)을 사용하면 코드를 훨씬 간결하게 만들 수 있습니다.

List<int> res = list.FindAll(i => i % 3 == 0);

이처럼 FindAll()은 복잡한 반복문 없이 한 줄로 조건 필터링을 처리할 수 있어, LINQ의 Where()와 함께 C#에서 가장 널리 쓰이는 컬렉션 필터링 방법 중 하나입니다.