>백엔드 개발 >C++ >C#에서 목록을 특정 크기의 하위 목록으로 효율적으로 청크하려면 어떻게 해야 합니까?

C#에서 목록을 특정 크기의 하위 목록으로 효율적으로 청크하려면 어떻게 해야 합니까?

DDD
DDD원래의
2025-01-18 04:41:07727검색

How Can I Efficiently Chunk a List into Sublists of a Specific Size in C#?

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를 활용합니다:

  1. 인덱싱 및 값 쌍: Select((x, i) => new { Index = i, Value = x })은 각 요소의 인덱스와 값을 포함하는 익명 유형을 생성합니다.

  2. 청크로 그룹화: GroupBy(x => x.Index / chunkSize) chunkSize로 나눈 인덱스를 기준으로 요소를 그룹화합니다. 이렇게 하면 동일한 청크 내의 요소가 함께 그룹화됩니다.

  3. 목록 생성: Select(x => x.Select(v => v.Value).ToList())은 각 그룹을 다시 원래 요소 유형의 목록으로 변환합니다.

  4. 목록의 최종 목록: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.