C#의 Array.FindAll() 메서드는 지정된 조건자(Predicate)가 정의한 조건과 일치하는 모든 요소를 배열에서 검색하여 새로운 배열로 반환하는 정적 메서드입니다. 조건을 만족하는 요소가 여러 개일 때 유용하게 사용할 수 있습니다.
문법(Syntax)
Array.FindAll() 메서드의 기본 문법은 다음과 같습니다.
public static T[] FindAll<T> (T[] array, Predicate<T> match);
매개변수 설명:
- array: 검색 대상이 되는 1차원 배열
- match: 검색 조건을 정의하는 Predicate<T> 델리게이트
메서드는 조건과 일치하는 모든 요소를 담은 T 타입의 새 배열을 반환하며, 일치하는 요소가 없으면 빈 배열을 반환합니다.
사용 예제
다음 예제는 문자열 배열에서 'b'로 시작하는 모든 요소를 찾아 출력하는 코드입니다.
using System;
public class Demo{
public static void Main(){
Console.WriteLine("배열 요소...");
string[] arr = { "car", "bike", "truck", "bus"};
for (int i = 0; i < arr.Length; i++){
Console.Write("{0} ", arr[i]);
}
Console.WriteLine();
String[] res = Array.FindAll(arr, ele => ele.StartsWith("b",
StringComparison.Ordinal));
Console.Write("\n검색된 모든 요소...\n");
for (int i = 0; i < res.Length; i++) {
Console.WriteLine("{0}", res[i]);
}
Console.WriteLine();
}
}실행 결과(Output)
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
배열 요소... car bike truck bus 검색된 모든 요소... bike bus
핵심 포인트 정리
- 람다 식 활용: 위 예제에서는
ele => ele.StartsWith("b", StringComparison.Ordinal)람다 식을 사용해 'b'로 시작하는 요소만 필터링했습니다. - StringComparison.Ordinal: 대소문자를 구분하는 정확한 비교 방식으로, 문화권(culture)에 영향을 받지 않는 안정적인 문자열 비교를 제공합니다.
- 원본 배열 불변: FindAll()은 원본 배열을 수정하지 않고, 조건에 맞는 요소들로 구성된 새로운 배열을 반환합니다.
- 관련 메서드: 첫 번째 일치 요소만 찾으려면
Array.Find(), 인덱스를 찾으려면Array.FindIndex(), 마지막 일치 요소는Array.FindLast()를 사용할 수 있습니다.