TakeWhile() 메서드는 시퀀스에서 지정한 조건이 참(true)인 동안에만 요소를 순서대로 가져오는 LINQ 연산자입니다. 조건이 처음으로 거짓(false)이 되는 순간, 그 이후의 요소들은 모두 무시됩니다.
TakeWhile() 기본 개념
먼저 문자열로 구성된 리스트를 살펴보겠습니다.
IList<string> str = new List<string>(){ "Car", "Bus", "Truck", "Airplane"};이제 길이가 4 미만인 문자열만 필요하다고 가정해 보겠습니다. 이 경우 람다 식(Lambda Expression)을 활용하여 TakeWhile() 메서드에 조건을 전달하면 됩니다.
str.TakeWhile(a => a.Length < 4);
전체 예제 코드
다음은 조건이 참인 동안에만 요소를 출력하는 전체 예제입니다.
using System;
using System.Linq;
using System.Collections.Generic;
public class Demo {
public static void Main() {
IList<string> str = new List<string>(){ "Car", "Bus", "Truck", "Airplane"};
var res = str.TakeWhile(a => a.Length < 4);
foreach(var arr in res)
Console.WriteLine(arr);
}
}실행 결과
Car Bus
결과 분석
리스트의 첫 번째 요소 "Car"(길이 3)와 두 번째 요소 "Bus"(길이 3)는 길이가 4 미만이므로 조건을 만족합니다. 하지만 세 번째 요소 "Truck"(길이 5)은 조건이 거짓이 되므로, TakeWhile()은 여기서 요소 가져오기를 중단합니다. 따라서 뒤에 있는 "Airplane"도 결과에 포함되지 않습니다.
TakeWhile()과 Where()의 차이점
TakeWhile()은 자주 Where()와 혼동되지만 두 메서드는 동작 방식이 다릅니다. Where()는 시퀀스 전체를 검사하여 조건을 만족하는 모든 요소를 반환하는 반면, TakeWhile()은 조건이 거짓이 되는 첫 번째 지점에서 즉시 중단하고 그 이후의 요소는 검사하지 않습니다. 위 예제에서 Where()를 사용했다면 "Car"와 "Bus"만 반환되지만, 만약 리스트 앞부분에 길이가 4 이상인 문자열이 있었다면 그 위치 이후의 요소들은 TakeWhile()에서 제외됩니다.