Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 group by 연산자로 데이터를 그룹별로 나누는 방법

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 연산자를 활용하면 복잡한 반복문 없이도 조건 기반 데이터 분류를 간결하게 처리할 수 있습니다.