데이터 분할(C#)
LINQ의 분할은 요소를 다시 정렬한 후 섹션 중 하나를 반환하지 않고 입력 시퀀스를 두 개의 섹션으로 나누는 작업을 가리킵니다.
Important
이 샘플은 System.Collections.Generic.IEnumerable<T> 데이터 원본을 사용합니다. System.Linq.IQueryProvider 기반 데이터 원본은 System.Linq.IQueryable<T> 데이터 원본과 식 트리를 사용합니다. 식 트리에는 허용되는 C# 구문에 대한 제한 사항이 있습니다. 또한 EF Core와 같은 각 IQueryProvider
데이터 원본에는 더 많은 제한이 적용될 수 있습니다. 데이터 원본에 대한 설명서를 확인합니다.
다음 그림은 문자 시퀀스에 대한 세 가지 분할 작업의 결과를 보여 줍니다. 첫 번째 작업은 시퀀스에서 처음 세 개의 요소를 반환합니다. 두 번째 작업은 처음 세 개의 요소를 건너뛰고 나머지 요소를 반환합니다. 세 번째 작업은 시퀀스에서 처음 두 개의 요소를 건너뛰고 다음 세 개의 요소를 반환합니다.
시퀀스를 분할하는 표준 쿼리 연산자 메서드가 다음 섹션에 나와 있습니다.
연산자
메서드 이름 | 설명 | 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
또한 TakeWhile
및 SkipWhile
메서드는 시퀀스의 요소를 사용하고 건너뜁니다. 그러나 이러한 메서드는 설정된 수의 요소 대신 조건에 따라 요소를 건너뛰거나 사용합니다. 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인 청크로 분할합니다.
참고 항목
.NET