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() 메서드
- 데이터 집합의 시작 위치에서 특정 개수만큼 데이터를 가져옵니다.
'C# > LINQ' 카테고리의 다른 글
[C#]LINQ 지정된 범위 또는 횟수만큼 데이터 생성 - Range, Repeat 메서드 (0) | 2022.08.14 |
---|---|
[C#]LINQ 특정 조건을 만족하는 데이터 생략하기 - SkipWhile 메서드 (0) | 2022.08.14 |
[C#]LINQ 특정 조건을 만족하는 데이터 가져오기 - TakeWhile 메서드 (0) | 2022.08.11 |
[C#]LINQ 특정 개수만큼 데이터 가져오기 - Take 메서드 (0) | 2022.08.09 |
[C#]LINQ 두 데이터가 동일한지 체크 - SequenceEqual 메서드 (0) | 2022.08.09 |
댓글