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

C# LINQ SkipLast() 메서드 – 시퀀스 끝의 요소를 제외하고 나머지 반환하기

C#의 SkipLast() 메서드는 컬렉션(시퀀스)의 끝에서 지정한 개수만큼 요소를 건너뛴 뒤, 나머지 요소들을 반환합니다. 내림차순 정렬과 함께 사용하면 상위 점수만 손쉽게 추출할 수 있어 실무에서 유용하게 활용됩니다.

예제 데이터 준비

먼저 학생들의 점수가 담긴 배열을 하나 준비하겠습니다.

int[] marks = { 45, 88, 50, 90, 95, 85 };

이 배열을 내림차순으로 정렬한 후, SkipLast(2)를 사용해 끝에서 두 개의 요소를 제외해 보겠습니다. 람다 식(Lambda Expression)을 활용하면 다음과 같이 작성할 수 있습니다.

IEnumerable<int> selMarks = marks.AsQueryable().OrderByDescending(s => s).SkipLast(2);

위 코드는 점수를 큰 값부터 정렬한 뒤 마지막 두 개(가장 낮은 두 점수)를 버리고, 나머지 요소들을 IEnumerable<int> 형태로 반환합니다.

전체 예제 코드

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

public class Demo {
    public static void Main() {
        int[] marks = { 45, 88, 50, 90, 95, 85 };
        
        // 내림차순 정렬 후 끝에서 두 개의 요소 제외
        IEnumerable<int> selMarks = marks.AsQueryable()
            .OrderByDescending(s => s)
            .SkipLast(2);
        
        Console.WriteLine("마지막 두 명의 점수를 제외한 결과...");
        foreach (int res in selMarks)
            Console.WriteLine(res);
    }
}

실행 결과

마지막 두 명의 점수를 제외한 결과...
95
90
88
85

정리

SkipLast(n)은 시퀀스의 끝에서 n개의 요소를 제외하고 나머지를 반환하는 LINQ 연산자입니다. 위 예제에서는 내림차순 정렬 후 하위 두 개의 점수(50, 45)가 제외되어 95, 90, 88, 85만 출력된 것을 확인할 수 있습니다.

참고로 SkipLast()는 .NET Core 2.0 이상 및 .NET Standard 2.1 이상 환경에서 사용할 수 있으며, 반대로 끝에서 n개의 요소만 가져오고 싶다면 TakeLast() 메서드를 사용하면 됩니다.