SkipWhile() 메서드란?
C# LINQ의 SkipWhile() 메서드는 지정된 조건이 참(true)으로 평가되는 동안 시퀀스에서 요소를 건너뛰고, 조건이 처음으로 거짓(false)이 되는 지점부터 나머지 모든 요소를 반환합니다.
예제 데이터
다음과 같은 정수 배열이 있다고 가정해 보겠습니다.
int[] marks = { 35, 42, 48, 88, 55, 90, 95, 85 };
조건 설정
건너뛸 요소를 판별할 람다 식 조건은 다음과 같습니다.
s => s >= 50
배열을 내림차순으로 정렬한 뒤 위 조건을 적용하면, 값이 50 이상인 요소들은 조건이 거짓이 되는 순간까지 순차적으로 건너뛰어집니다.
전체 예제 코드
using System;
using System.Linq;
using System.Collections.Generic;
public class Demo {
public static void Main() {
int[] marks = { 35, 42, 48, 88, 55, 90, 95, 85 };
// 내림차순 정렬 후 50 이상인 요소를 건너뜀
IEnumerable<int> selMarks = marks.AsQueryable()
.OrderByDescending(s => s)
.SkipWhile(s => s >= 50);
// 나머지 요소 출력
Console.WriteLine("50 미만 점수:");
foreach (int res in selMarks) {
Console.WriteLine(res);
}
}
}
실행 결과
50 미만 점수:
48
42
35
동작 원리
위 코드의 실행 흐름을 단계별로 살펴보면 다음과 같습니다.
- 정렬 단계: OrderByDescending(s => s)에 의해 배열이 내림차순으로 정렬되어 { 95, 90, 88, 85, 55, 48, 42, 35 } 순서가 됩니다.
- 건너뛰기 단계: SkipWhile(s => s >= 50)이 앞에서부터 요소를 검사하여 조건이 참인 동안 95, 90, 88, 85, 55를 건너뜁니다.
- 반환 단계: 48에서 조건(s >= 50)이 처음으로 거짓이 되므로, 48부터 시퀀스 끝까지의 요소인 48, 42, 35가 최종 결과로 반환됩니다.
주의: SkipWhile()은 조건이 한 번이라도 거짓으로 평가되면 그 이후에는 더 이상 조건을 검사하지 않고 남은 모든 요소를 그대로 반환합니다. 따라서 시퀀스 중간에 조건을 만족하는 요소가 다시 나타나더라도 해당 요소는 제외되지 않습니다.