C#에서 List<T> 컬렉션 안에서 지정한 조건을 만족하는 첫 번째 항목을 찾으려면 Find() 메서드를 사용하면 됩니다. 이 메서드는 Predicate<T> 대리자를 인수로 받아, 조건이 참(true)이 되는 첫 번째 요소를 반환합니다.
Find() 메서드란?
List.Find(Predicate<T> match)는 리스트를 처음부터 순차적으로 검색하면서 전달된 조건(술어)과 일치하는 첫 번째 요소를 반환합니다. 조건에 맞는 요소가 없으면 기본값(default)을 반환합니다.
예제 1: 10의 배수 찾기
다음 예제는 리스트에서 10으로 나누어 떨어지는 첫 번째 숫자를 찾는 코드입니다.
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(200);
list.Add(215);
list.Add(310);
list.Add(500);
list.Add(600);
Console.WriteLine("List elements...");
foreach (int i in list) {
Console.WriteLine(i);
}
Console.WriteLine("First Occurrence = " + list.Find(demo));
}
}실행 결과
List elements... 200 215 310 500 600 First Occurrence = 200
리스트의 첫 번째 요소인 200이 이미 10의 배수 조건을 만족하므로, 결과는 200이 출력됩니다.
예제 2: 짝수 찾기
이번에는 리스트에서 처음으로 등장하는 짝수를 찾는 예제입니다.
using System;
using System.Collections.Generic;
public class Demo {
private static bool demo(int i) {
return ((i % 2) == 0);
}
public static void Main(String[] args) {
List<int> list = new List<int>();
list.Add(255);
list.Add(315);
list.Add(410);
list.Add(500);
list.Add(600);
list.Add(710);
list.Add(800);
list.Add(1000);
Console.WriteLine("List elements...");
foreach (int i in list) {
Console.WriteLine(i);
}
Console.WriteLine("First Occurrence = " + list.Find(demo));
}
}실행 결과
List elements... 255 315 410 500 600 710 800 1000 First Occurrence = 410
앞의 두 요소인 255와 315는 홀수이므로 조건에 해당하지 않고, 세 번째 요소인 410이 처음으로 짝수 조건을 만족하기 때문에 결과는 410입니다.
정리
- Find(): 조건에 일치하는 첫 번째 요소 하나만 반환합니다.
- FindAll(): 조건에 일치하는 모든 요소를 리스트로 반환합니다.
- FindIndex(): 조건에 일치하는 첫 번째 요소의 인덱스를 반환합니다.
람다 식을 활용하면 별도의 메서드 정의 없이 list.Find(x => x % 10 == 0)처럼 더 간결하게 작성할 수도 있습니다.