Aggregate()
합계, 총액이라는 의미로 생각하면 이해하기가 편하다. 누적 연산을 할 때 쓰면 유용하다.
정리하자면, 리스트의 요소들을 하나의 값으로 변환한다.
함수형 프로그래밍에는 Fold(), Reduce()와 같은 함수들이 비슷한 기능을 한다.
문자열 모아서 출력하기
각각의 요소들을 이어 붙여서 하나의 문자열로 출력이 가능하다.
public class Program
{
static void Main(string[] args)
{
string[] list = {"kim", "lee", "park", "choi", "dol"};
var data = list.Aggregate((str1, str2) => str1 + ", " + str2);
Console.WriteLine(data);
}
}
숫자 합산하기
각각의 요소들을 모아서 합계로 출력이 가능하다.
Sum 함수를 사용할 수도 있지만 Aggregate를 통해서도 구현이 가능하다.
public class Program
{
static void Main(string[] args)
{
List<int> list = new List<int>() { 1,2,3,4,5,6,7,8,9,10 };
var data = list.Aggregate((value1, value2) => value1 + value2);
Console.WriteLine(data);
}
}
using System;
using System.Collections.Generic;
using System.Linq;
public partial class Program
{
static void Main(string[] args)
{
AggregateInt();
}
public static void AggregateInt()
{
var list = new List<int>() { 1, 2, 3, 4, 5, 6 };
int addision = list.Aggregate((sum, i) => sum + i);
Console.WriteLine($"The sum of listInt is {addision}");
}
}
1부터 6까지 정수를 포함하는 int 형식의 리스트를 만들고, Aggregate를 이용해서 이 리스트(listInt) 내의 항목들의 합을 구한다. 다음은 이 코드의 흐름이다.
(sum, i) => sum + i
sum = 1
sum = 1 + 2
sum = 3 + 3
sum = 6 + 4
sum = 10 + 5
sum = 15 + 6
sum = 21
addition = sum
조건별로 모으기
조건에 맞는 대상만 모아서 출력하는 게 가능하다.
public class Program
{
static void Main(string[] args)
{
string[] fruits = { "apple", "mango", "orange", "passionfruit", "grape" };
string longestName = fruits.Aggregate((longest, next) => next.Length > longest.Length ? next : longest);
Console.WriteLine("The fruit with the longest name is {0}.", longestName);
}
}
가장 작은 값 찾기
삼항 연산자를 이용해서 가장 작은 수를 찾는 것도 가능하다.
public class Program
{
static void Main(string[] args)
{
List<int> list = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var min = list.Aggregate((value1, value2) => (value1 < value2) ? value1 : value2 );
Console.WriteLine(min);
}
}
두 원소 사이의 차이가 가장 적은 항목을 찾기
static void Main(string[] args)
{
List<(int, int)> list = new List<(int, int)>() { (1, 2), (3, 5), (10, 20) };
var result = list.Aggregate(CompareAnB);
Console.WriteLine($"{result.Item1} {result.Item2}");
}
static (int, int) CompareAnB((int, int) a, (int, int) b)
{
return (a.Item1 - a.Item2) > (b.Item1 - b.Item2) ? a : b;
}
참조 사이트
함께 읽으면 좋은 글
'프로그래밍 > C# LINQ' 카테고리의 다른 글
C# Linq - Enumerable.All() (0) | 2024.02.15 |
---|---|
C# Linq - Enumerable.Range() (0) | 2023.12.18 |
C# Linq - Enumerable.OrderBy() (26) | 2023.06.20 |
C# Select vs SelectMany (22) | 2023.06.19 |
C# Linq - Enumerable.Repeat() (26) | 2023.06.13 |
댓글