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

C#에서 시퀀스 시작 부분의 지정된 개수만큼 요소를 반환하는 프로그램

C#의 LINQ를 활용하면 시퀀스(배열 등)에서 원하는 위치의 요소를 손쉽게 추출할 수 있습니다. 이번 예제에서는 OrderByDescending()Take() 메서드를 조합하여 배열을 내림차순으로 정렬한 뒤, 시작 부분에서 지정된 개수만큼의 요소를 반환하는 방법을 알아보겠습니다.

1. 배열 선언 및 내림차순 정렬

먼저 정수형 배열을 하나 선언합니다. 이후 OrderByDescending()을 사용하면 요소들을 큰 값부터 작은 값 순서로 정렬할 수 있습니다.

int[] prod = { 290, 340, 129, 540, 456, 898, 765, 789, 345};

2. Take() 메서드로 앞부분 요소 가져오기

Take() 메서드는 시퀀스의 시작 부분에서 인수로 전달된 개수만큼의 요소를 반환합니다. 아래 코드에서는 내림차순으로 정렬된 결과 중 상위 2개의 요소를 가져옵니다.

IEnumerable<int> units = prod.AsQueryable().OrderByDescending(s => s).Take(2);

즉, 정렬 후 가장 큰 두 개의 값이 선택됩니다. Take()에 다른 숫자를 전달하면 그 개수만큼 요소를 가져올 수 있어 상위 N개 데이터 조회에 유용하게 활용됩니다.

전체 예제 코드

지금까지의 내용을 종합한 완전한 코드는 다음과 같습니다.

using System;
using System.Linq;
using System.Collections.Generic;

public class Demo {
   public static void Main() {
      int[] prod = { 290, 340, 129, 540, 456, 898, 765, 789, 345};
      
      // 판매량 기준 상위 2개 제품 조회
      IEnumerable<int> units = prod.AsQueryable().OrderByDescending(s => s).Take(2);
      
      foreach (int res in units) {
         Console.WriteLine(res);
      }
   }
}

실행 결과

위 프로그램을 실행하면 내림차순으로 정렬된 값 중 앞의 두 요소가 출력됩니다.

898
789

정리

이처럼 LINQ의 OrderByDescending()은 시퀀스를 내림차순으로 정렬하고, Take()는 정렬된 시퀀스에서 처음 N개의 요소를 추출합니다. 두 메서드를 함께 사용하면 '최고 판매량 상위 2개 제품'처럼 상위 항목만 간단히 조회할 수 있습니다. 참고로 Take()는 지연 실행(lazy evaluation) 방식으로 동작하므로 foreach 루프에서 실제로 열거될 때 쿼리가 실행됩니다.