C#에서 group by 연산자를 사용하면 표현식의 결과를 조건에 따라 여러 그룹으로 나눌 수 있습니다. LINQ 쿼리에서 자주 활용되는 이 기능은 데이터를 분류하거나 집계할 때 매우 유용합니다.
기본 개념
group by 절은 지정한 키 값을 기준으로 컬렉션의 요소들을 묶어 줍니다. 각 그룹은 IGrouping<TKey, TElement> 형태로 반환되며, Key 속성을 통해 그룹의 기준 값에 접근할 수 있습니다.
예제: 20을 기준으로 배열 요소 그룹화하기
먼저 다음과 같은 정수 배열이 있다고 가정해 보겠습니다.
int[] a = { 5, 10, 15, 20, 25, 30 };이 배열의 요소들을 20 이상인지 여부를 기준으로 두 그룹으로 나누어 보겠습니다. group by와 orderby를 함께 사용하면 다음과 같이 작성할 수 있습니다.
var check = from element in a orderby element group element by chkGreater(element);
여기서 chkGreater 메서드는 요소가 20 이상인지 판단하여 true 또는 false를 반환하며, 이 반환값이 그룹화의 키가 됩니다.
전체 코드
using System;
using System.Linq;
class Demo {
static void Main() {
int[] a = { 5, 10, 15, 20, 25, 30 };
var check = from element in a orderby element group element by chkGreater(element);
foreach (var val in check) {
Console.WriteLine(val.Key);
foreach (var res in val) {
Console.WriteLine(res);
}
}
}
static bool chkGreater(int a) {
return a >= 20;
}
}실행 결과
위 코드를 실행하면 false 그룹(20 미만)과 true 그룹(20 이상)으로 나뉘어 출력됩니다.
False 5 10 15 True 20 25 30
코드 설명
- orderby element: 그룹화하기 전에 요소를 오름차순으로 정렬하여 결과의 가독성을 높입니다.
- group element by chkGreater(element): 각 요소를
chkGreater메서드의 반환값(true/false)을 키로 하여 그룹화합니다. - val.Key: 해당 그룹의 키 값(false 또는 true)을 출력합니다.
이처럼 group by 연산자를 활용하면 복잡한 반복문 없이도 조건 기반 데이터 분류를 간결하게 처리할 수 있습니다.