C#에서 목록을 지정된 크기의 더 작은 하위 목록으로 나누기
원래 splitList
함수는 목록을 각각 30개의 요소를 포함하는 더 작은 목록으로 나누는 것을 목표로 했습니다. 그러나 크기가 일관되지 않은 하위 목록을 생성하는 결함이 있었습니다.
확장 방법을 사용하여 개선된 솔루션:
보다 강력한 접근 방식은 C# 확장 메서드를 만드는 것입니다.
<code class="language-csharp">public static class ListExtensions { public static List<List<T>> ChunkBy<T>(this List<T> source, int chunkSize) { return source .Select((x, i) => new { Index = i, Value = x }) .GroupBy(x => x.Index / chunkSize) .Select(x => x.Select(v => v.Value).ToList()) .ToList(); } }</code>
기능 설명:
이 확장 방법은 목록(source
)을 주어진 chunkSize
의 하위 목록으로 효율적으로 청크합니다. LINQ를 활용합니다:
인덱싱 및 값 쌍: Select((x, i) => new { Index = i, Value = x })
은 각 요소의 인덱스와 값을 포함하는 익명 유형을 생성합니다.
청크로 그룹화: GroupBy(x => x.Index / chunkSize)
chunkSize
로 나눈 인덱스를 기준으로 요소를 그룹화합니다. 이렇게 하면 동일한 청크 내의 요소가 함께 그룹화됩니다.
목록 생성: Select(x => x.Select(v => v.Value).ToList())
은 각 그룹을 다시 원래 요소 유형의 목록으로 변환합니다.
목록의 최종 목록: ToList()
은 청크된 하위 목록을 포함하는 최종 목록을 생성합니다.
실용적 적용:
이 방법을 사용하여 locations
이라는 목록에서 크기가 30인 하위 목록을 만들려면:
<code class="language-csharp">List<List<YourElementType>> chunkedLists = locations.ChunkBy(30);</code>
예시:
locations
에 144개의 요소가 포함된 경우 chunkedLists
에는 크기가 30, 30, 30, 30, 24인 5개의 하위 목록이 올바르게 포함됩니다.
향후 C# 개선:
.NET 6에는 이 목적을 위해 내장된 Chunk
메서드가 도입되어 프로세스가 더욱 단순화되었습니다.
<code class="language-csharp">const int PAGE_SIZE = 5; IEnumerable<Movie> chunks = movies.Chunk(PAGE_SIZE);</code>
위 내용은 C#에서 목록을 특정 크기의 하위 목록으로 효율적으로 청크하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!