C#의 SkipWhile() 메서드는 지정된 조건이 참인 동안 시퀀스의 요소를 건너뛰고(bypass), 그 이후의 나머지 요소들을 반환합니다. 이 메서드는 System.Linq 네임스페이스에서 제공되며, 람다 식(Lambda Expression)을 사용해 조건을 간결하게 정의할 수 있습니다.
SkipWhile()의 기본 동작
SkipWhile()은 배열이나 컬렉션을 처음부터 순회하면서 조건을 만족하는 요소를 제외하고, 조건이 처음으로 거짓이 되는 시점부터 시퀀스 끝까지의 모든 요소를 결과로 반환합니다.
예제 데이터 준비
다음과 같은 정수형 배열이 있다고 가정해 보겠습니다.
int[] marks = { 45, 88, 55, 90, 95, 85 };건너뛸 조건 설정하기
이제 60 이상인 요소들을 건너뛰어 보겠습니다. 조건은 람다 식으로 정의하며, 내림차순으로 정렬한 뒤 SkipWhile()을 적용하는 코드는 다음과 같습니다.
IEnumerable<int> selMarks = marks.AsQueryable().OrderByDescending(s => s).SkipWhile(s => s >= 60);
전체 예제 코드
using System;
using System.Linq;
using System.Collections.Generic;
public class Demo {
public static void Main() {
int[] marks = { 45, 88, 55, 90, 95, 85 };
// 60 이상인 점수는 건너뜁니다.
IEnumerable<int> selMarks = marks.AsQueryable().OrderByDescending(s => s).SkipWhile(s => s >= 60);
// 남은 요소들을 출력합니다.
Console.WriteLine("Skipped marks > 60...");
foreach (int res in selMarks) {
Console.WriteLine(res);
}
}
}실행 결과
Skipped marks > 60... 55 45
동작 원리 상세 설명
위 예제에서는 먼저 OrderByDescending()으로 배열을 내림차순 정렬하여 { 95, 90, 88, 85, 55, 45 } 순서로 만듭니다. 이후 SkipWhile(s => s >= 60) 조건에 따라 95, 90, 88, 85가 차례대로 건너뛰어지고, 조건을 만족하지 않는 첫 번째 요소인 55부터 마지막 요소인 45까지가 최종 결과로 반환됩니다.
주의할 점: SkipWhile()은 조건이 거짓이 되는 순간 이후에는 더 이상 조건을 검사하지 않습니다. 즉, 시퀀스 중간에 조건을 벗어나는 요소가 등장하면 그 뒤에 오는 모든 요소(조건을 다시 만족하더라도)가 결과에 그대로 포함됩니다. 이 점은 Where()와의 가장 큰 차이이므로 실무에서 활용할 때 반드시 기억해야 합니다.