C#의 Aggregate() 메서드는 시퀀스(컬렉션) 전체에 걸쳐 누산기(accumulator) 함수를 적용하는 LINQ 연산자입니다. 요소들을 하나씩 순회하면서 이전 결과값과 현재 요소를 결합해 최종적으로 단일 결과를 도출할 때 유용하게 사용됩니다.
예제 배열 준비하기
먼저 다음과 같은 문자열 배열이 있다고 가정해 보겠습니다.
string[] arr = { "DemoOne", "DemoTwo", "DemoThree", "DemoFour" };Aggregate() 메서드 사용 방법
이제 Aggregate() 메서드를 호출해 보겠습니다. 이 예제에서는 비교 기준이 되는 시드(seed) 값으로 "DemoFive"를 설정했습니다.
string res = arr.AsQueryable().Aggregate("DemoFive", (longest, next) => next.Length > longest.Length ? next : longest, str => str.ToLower());위 코드에서 세 번째 인수로 전달된 람다식 str => str.ToLower()는 최종 결과를 소문자로 변환하는 결과 선택자(result selector) 역할을 합니다. 따라서 최종 결과 문자열은 초기 시드 값인 "DemoFive"보다 더 많은 문자를 가진 요소여야 하며, 모든 처리가 끝난 뒤 소문자로 변환되어 반환됩니다.
전체 예제 코드
using System;
using System.Linq;
class Demo {
static void Main() {
string[] arr = { "DemoOne", "DemoTwo", "DemoThree", "DemoFour" };
string res = arr.AsQueryable().Aggregate(
"DemoFive",
(longest, next) => next.Length > longest.Length ? next : longest,
str => str.ToLower()
);
Console.WriteLine("문자 수가 더 많은 문자열: {0}", res);
}
}실행 결과
문자 수가 더 많은 문자열: demothree
동작 원리 살펴보기
Aggregate() 메서드는 다음과 같은 순서로 동작합니다.
1. 초기 시드 값 "DemoFive"(길이 8)를 누적 시작점으로 설정합니다.
2. 각 배열 요소와 현재 누적값의 길이를 비교하여 더 긴 쪽을 새로운 누적값으로 유지합니다.
3. "DemoThree"(길이 9)가 시드 값보다 길기 때문에 최종 누적값이 됩니다.
4. 마지막으로 결과 선택자에 의해 소문자 "demothree"로 변환되어 반환됩니다.
이처럼 Aggregate() 메서드는 최댓값 찾기, 문자열 결합, 집계 계산 등 다양한 시나리오에서 시퀀스를 하나의 값으로 축약하는 강력한 도구입니다.