다음을 통해 공유


데이터 분할(C#)

LINQ에서 분할은 요소를 다시 정렬하지 않고 입력 시퀀스를 두 섹션으로 나눈 다음 섹션 중 하나를 반환하는 작업을 의미합니다.

중요합니다

이 샘플은 System.Collections.Generic.IEnumerable<T> 데이터 원본을 사용합니다. System.Linq.IQueryProvider 기반 데이터 원본은 System.Linq.IQueryable<T> 데이터 원본과 식 트리를 사용합니다. 식 트리에는 허용되는 C# 구문에 대한 제한 사항이 있습니다. 또한 IQueryProviderEF Core와 같이 더 많은 제한을 가할 수 있습니다. 데이터 원본에 대한 설명서를 확인합니다.

다음 그림에서는 문자 시퀀스에 대한 세 가지 분할 작업의 결과를 보여 줍니다. 첫 번째 작업은 시퀀스의 처음 세 요소를 반환합니다. 두 번째 작업은 처음 세 요소를 건너뛰고 나머지 요소를 반환합니다. 세 번째 연산은 시퀀스의 처음 두 요소를 건너뛰고 다음 세 개의 요소를 반환합니다.

세 가지 LINQ 분할 작업을 보여 주는 그림.

다음 섹션에는 시퀀스를 파티션하는 표준 쿼리 연산자 메서드가 나열되어 있습니다.

운영자

메서드 이름 설명 C# 쿼리 식 구문 추가 정보
건너뛰기 시퀀스에서 지정된 위치까지 요소를 건너뜁니다. 적용할 수 없습니다. Enumerable.Skip
Queryable.Skip
조건을 만족할 때까지 건너뛰기 요소가 조건을 충족하지 않을 때까지 조건자 함수를 기반으로 요소를 건너뜁니다. 적용할 수 없습니다. Enumerable.SkipWhile
Queryable.SkipWhile
잡다 시퀀스에서 지정된 위치까지 요소를 가져옵니다. 적용할 수 없습니다. Enumerable.Take
Queryable.Take
조건 충족 시 가져오기 요소가 조건을 충족하지 않을 때까지 조건자 함수를 기반으로 요소를 사용합니다. 적용할 수 없습니다. Enumerable.TakeWhile
Queryable.TakeWhile
청크 시퀀스의 요소를 지정된 최대 크기의 청크로 분할합니다. 적용할 수 없습니다. Enumerable.Chunk
Queryable.Chunk

다음 예제는 모두 0에서 7까지의 숫자 시퀀스를 생성하는 데 사용합니다 Enumerable.Range(Int32, Int32) .

비고

표준 쿼리 연산자 개요 문서에서 이 영역에 대한 공통 데이터 원본을 참조할 수 있습니다.

이 메서드를 Take 사용하여 시퀀스의 첫 번째 요소만 사용합니다.

foreach (int number in Enumerable.Range(0, 8).Take(3))
{
    Console.WriteLine(number);
}
// This code produces the following output:
// 0
// 1
// 2

이 메서드를 Skip 사용하여 시퀀스의 첫 번째 요소를 건너뛰고 나머지 요소를 사용합니다.

foreach (int number in Enumerable.Range(0, 8).Skip(3))
{
    Console.WriteLine(number);
}
// This code produces the following output:
// 3
// 4
// 5
// 6
// 7

두 가지 메서드는 시퀀스에서 요소를 가져가고 건너뛸 수 있습니다. 그러나 이러한 메서드는 설정된 수의 요소 대신 조건에 따라 요소를 건너뛰거나 사용합니다. TakeWhile 는 요소가 조건과 일치하지 않을 때까지 시퀀스의 요소를 사용합니다.

foreach (int number in Enumerable.Range(0, 8).TakeWhile(n => n < 5))
{
    Console.WriteLine(number);
}
// This code produces the following output:
// 0
// 1
// 2
// 3
// 4

SkipWhile 조건이 true이면 첫 번째 요소를 건너뜁니다. 조건과 일치하지 않는 첫 번째 요소와 모든 후속 요소가 반환됩니다.

foreach (int number in Enumerable.Range(0, 8).SkipWhile(n => n < 5))
{
    Console.WriteLine(number);
}
// This code produces the following output:
// 5
// 6
// 7

지정된 Chunk에 따라 size 연산자는 시퀀스의 요소를 분할하는 데 사용됩니다.

int chunkNumber = 1;
foreach (int[] chunk in Enumerable.Range(0, 8).Chunk(3))
{
    Console.WriteLine($"Chunk {chunkNumber++}:");
    foreach (int item in chunk)
    {
        Console.WriteLine($"    {item}");
    }

    Console.WriteLine();
}
// This code produces the following output:
// Chunk 1:
//    0
//    1
//    2
//
//Chunk 2:
//    3
//    4
//    5
//
//Chunk 3:
//    6
//    7

앞의 C# 코드는 다음과 같습니다.

  • Enumerable.Range(Int32, Int32)을(를) 사용하여 숫자 시퀀스를 생성합니다.
  • 연산자를 Chunk 적용하여 시퀀스를 최대 크기가 3인 청크로 분할합니다.

참고하십시오