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() 메서드를 사용하면 됩니다.