다음을 통해 공유


데이터 분할(C#)

LINQ의 분할은 요소를 다시 정렬한 후 섹션 중 하나를 반환하지 않고 입력 시퀀스를 두 개의 섹션으로 나누는 작업을 가리킵니다.

Important

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

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

세 개의 LINQ 분할 작업을 보여주는 그림.

시퀀스를 분할하는 표준 쿼리 연산자 메서드가 다음 섹션에 나와 있습니다.

연산자

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

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

시퀀스의 첫 번째 요소만 사용하려면 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

또한 TakeWhileSkipWhile 메서드는 시퀀스의 요소를 사용하고 건너뜁니다. 그러나 이러한 메서드는 설정된 수의 요소 대신 조건에 따라 요소를 건너뛰거나 사용합니다. 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인 청크로 분할합니다.

참고 항목