c#实现对大量文章标签进行聚合分组

比如已知是 10001个章节,第个页面最多显示100个标签,则最终会有3层。以下代码是自己写出,由gpt将递归优化为while循环。

复制代码
void Main()
{
    int totalChapterCount = 10001;
    int maxChapterCount = 100;

    var chapters = new List<Chapter>();
    for (var i = 0; i < totalChapterCount; i++)
        chapters.Add(new Chapter(i + 1, i + 1) { });
    var result = groupChapters(chapters, maxChapterCount);
    result.Dump();
}

public class Chapter
{
    public int StartIndex { get; set; }
    public int EndIndex { get; set; }
    public List<Chapter> SubChapters { get; set; }

    public Chapter(int start, int end)
    {
        this.StartIndex = start;
        this.EndIndex = end;
        this.SubChapters = new List<Chapter>();
    }
}

public List<Chapter> groupChapters(List<Chapter> chapters, int maxChapterCount)
{
    while (chapters.Count > maxChapterCount)
    {
        var newChapters = new List<Chapter>();
        for (int i = 0; i < chapters.Count; i += maxChapterCount)
        {
            var group = chapters.Skip(i).Take(maxChapterCount).ToList();
            var start = group.First().StartIndex;
            var end = group.Last().EndIndex;
            var newChapter = new Chapter(start, end) { SubChapters = group };
            newChapters.Add(newChapter);
        }
        chapters = newChapters;
    }

    return chapters;
}
复制代码

为了便于理解,备忘原始递归:

复制代码
public List<Chapter> groupChapters(List<Chapter> chapters, int maxChapterCount)
{
    var groups = chapters.Select((x, index) => new { Chapter = x, GroupIndex = index / maxChapterCount })
                        .GroupBy(item => item.GroupIndex)
                        .Select(x => new Chapter(x.First().Chapter.StartIndex, x.Last().Chapter.EndIndex) { SubChapters = x.ToList().Select(y=>y.Chapter).ToList() })
                        .ToList();
    if(groups.Count <= maxChapterCount)
        return groups;
    
    return groupChapters(groups,maxChapterCount);
}
复制代码

 

posted on   空明流光  阅读(28)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2012-12-26 asp.net 实现LRC歌词播放

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示