C#/LINQ

[C#]LINQ 특정 개수만큼 생략 - Skip 메서드

DevStory 2022. 8. 11.

Skip 메서드

C#의 Linq는 데이터 집합의 처음 위치에서 n개의 요소만큼 건너뛴 다음 나머지 값을 반환하는 Skip() 메서드를 제공합니다. 즉, Skip() 메서드에 int 타입의 값 n을 전달하면 n번째 위치부터 시작하는 모든 값이 반환됩니다.

IEnumerable<TSource> Skip<TSource>(this IEnumerable<TSource> source, int count);

주의사항으로 Skip() 메서드를 호출하는 데이터 집합이 null로 할당된 경우 ArgumnetNullException이 발생합니다.


예제 1. int 타입의 List

다음 예제는 5개의 요소가 존재하는 int 타입의 List에서 Skip() 메서드를 호출합니다. Skip() 메서드에 3을 전달하면 처음 위치에서 3개의 요소를 건너뛴 다음 나머지 데이터를 가져옵니다.

class Program
{
  static void Main(string[] args)
  {
    List<int> intList = new List<int>()
    {
      50, 10, 40, 20, 30
    };

    List<int> SkipResult = intList.Skip(3).ToList();

    foreach (int num in SkipResult)
    {
      Console.WriteLine(num);
    }
  }
}

[실행 결과]

20
30

예제 2. 질의 구문에서 Skip 메서드 호출

질의 구문에는 Skip() 메서드를 지원하지 않습니다. 따라서, 메서드 구문과 혼합하여 사용합니다.

class Program
{
  static void Main(string[] args)
  {
    List<int> intList = new List<int>()
    {
      50, 10, 40, 20, 30
    };

    List<int> SkipResult = (from   num in intList
                            select num).Take(3).ToList();

    foreach (int num in TakeResult)
    {
      Console.WriteLine(num);
    }
  }
}

[실행 결과]

20
30

예제 3. 필터링 후 Skip 메서드 호출

다음 예제는 int 타입의 List에서 Where 절을 사용하여 30보다 큰 요소를 추출된 결과에서 Skip() 메서드를 호출하여 3개의 요소를 건너뛴 다음 나머지 데이터를 가져옵니다.

class Program
{
  static void Main(string[] args)
  {
    List<int> intList = new List<int>()
    {
      10, 20, 30, 40, 50, 60, 70, 80
    };

    List<int> SkipResult = intList.Where(num => num > 30).Skip(3).ToList();

    foreach (int num in SkipResult)
    {
      Console.WriteLine(num);
    }
  }
}

[실행 결과]

70
80

Where절에서 추출된 결과는 40, 50, 60, 70, 80입니다. 추출된 결과에서 Skip() 메서드를 호출하면 처음 위치인 40부터 3개의 요소를 건너뜁니다.

 

따라서, 40, 50, 60은 생략되고 70, 80이 반환됩니다.


예제 4. 데이터 집합을 null로 할당

데이터 집합을 null로 할당하고 Skip() 메서드를 호출하면 다음과 같이 ArgumentNullException이 발생합니다.

class Program
{
  static void Main(string[] args)
  {
    List<int> intList = null;

    List<int> SkipResult = intList.Skip(3).ToList();

    foreach (int num in SkipResult)
    {
      Console.WriteLine(num);
    }
  }
}

[에러 내용]


예제 5. 전달된 값이 데이터 개수보다 많은 경우

다음 예제는 Skip() 메서드에 전달된 값이 데이터 집합의 개수보다 많은 경우입니다.

class Program
{
  static void Main(string[] args)
  {
    List<int> intList = new List<int>()
    {
      50, 10, 40, 20, 30
    };

    List<int> SkipResult = intList.Skip(10).ToList();

    Console.WriteLine(SkipResult.Count());
  }
}

[실행 결과]

0

Skip 메서드와 Take 메서드의 차이점

class Program
{
  static void Main(string[] args)
  {
    List<int> intList = new List<int>()
    {
      50, 10, 40, 20, 30
    };

    List<int> SkipResult = intList.Skip(3).ToList();

    Console.WriteLine("Skip() 메서드 결과");
    foreach (int num in SkipResult)
    {
      Console.Write(num + " ");
    }

    List<int> TakeResult = intList.Take(3).ToList();

    Console.WriteLine("\nTake() 메서드 결과");
    foreach (int num in TakeResult)
    {
      Console.Write(num + " ");
    }
  }
}

[실행 결과]

Skip() 메서드 결과
20 30
Take() 메서드 결과
50 10 40

Skip() 메서드

- 데이터 집합의 시작 위치에서 특정 개수만큼 건너뛴 다음 나머지 데이터를 가져옵니다.

 

Take() 메서드

- 데이터 집합의 시작 위치에서 특정 개수만큼 데이터를 가져옵니다.

반응형

댓글