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

C# LINQ에서 Take와 Skip 연산자를 함께 활용하는 방법

C# LINQ에는 시퀀스(컬렉션)의 요소를 손쉽게 제어할 수 있는 TakeSkip 연산자가 있습니다. 두 연산자는 각각 다음과 같은 역할을 수행합니다.

  • Take: 시퀀스의 첫 번째 요소부터 지정한 개수만큼 요소를 반환합니다.
  • Skip: 시퀀스의 첫 번째 요소부터 지정한 개수만큼 요소를 건너뛴 나머지를 반환합니다.

즉, Take는 배열이나 리스트에서 원하는 개수의 요소를 가져오고, Skip은 지정된 위치까지의 요소를 무시하는 방식으로 동작합니다. 이 두 연산자를 함께 사용하면 특정 범위의 데이터만 추출할 수 있어 페이징 처리 등에 매우 유용합니다.

예제 1: Skip 연산자 사용하기

아래 예제에서는 28개의 숫자로 이루어진 리스트에서 앞의 5개 요소를 건너뛰고 결과를 확인합니다.

class Program{
   static void Main(string[] args){
      List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 5, 6, 7, 7, 8, 8 };
      System.Console.WriteLine(numbers.Count());
      var skipRes = numbers.Skip(5);
      System.Console.WriteLine(skipRes.Count());
      Console.ReadLine();
   }
}

실행 결과

28
23

전체 28개 요소 중 앞의 5개가 제외되어 23개의 요소가 남게 됩니다.

예제 2: Take 연산자 사용하기

이번에는 같은 리스트에서 앞의 5개 요소만 가져오는 예제입니다.

class Program{
   static void Main(string[] args){
      List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 5, 6, 7, 7, 8, 8 };
      System.Console.WriteLine(numbers.Count());
      var takeRes = numbers.Take(5);
      System.Console.WriteLine(takeRes.Count());
      Console.ReadLine();
   }
}

실행 결과

28
5

전체 28개 중 첫 번째 요소부터 5개의 요소만 선택되었습니다.

예제 3: Skip과 Take 함께 사용하기

두 연산자를 메서드 체이닝으로 연결하면, 앞부분을 건너뛴 뒤 원하는 개수만큼 요소를 가져올 수 있습니다. 아래 예제는 앞의 10개 요소를 건너뛴 후 그다음 18개의 요소를 가져옵니다.

class Program{
   static void Main(string[] args){
      List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 5, 6, 7, 7, 8, 8 };
      System.Console.WriteLine(numbers.Count());
      var takeSkipRes = numbers.Skip(10).Take(18);
      System.Console.WriteLine(takeSkipRes.Count());
      Console.ReadLine();
   }
}

실행 결과

28
18

28개 요소 중 처음 10개를 Skip하고 이후 18개를 Take하여 최종적으로 18개의 요소가 반환되었습니다.

정리

Skip(n)은 앞에서 n개의 요소를 제외하고, Take(n)은 앞에서 n개의 요소만 선택합니다. 두 연산자를 조합한 Skip(a).Take(b) 패턴은 대용량 데이터에서 특정 구간만 조회하는 페이지네이션(pagination) 구현에 널리 활용되므로 꼭 익혀두시기 바랍니다.