首页 > 编程语言 >c#实现对大量文章标签进行聚合分组

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

时间:2023-12-26 22:25:42浏览次数:36  
标签:Chapter c# 标签 List chapters int 分组 var maxChapterCount

比如已知是 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);
}

 

标签:Chapter,c#,标签,List,chapters,int,分组,var,maxChapterCount
From: https://www.cnblogs.com/nanfei/p/17929499.html

相关文章

  • 基于FPGA的图像PSNR质量评估计算实现,包含testbench和MATLAB辅助验证程序
    1.算法运行效果图预览设置较大的干扰,PSNR=15。   设置较小的干扰,PSNR=25。   2.算法运行软件版本matlab2022a vivado2019.2  3.算法理论概述      基于FPGA的图像PSNR(峰值信噪比)质量评估计算实现涉及到数字图像处理、硬件设计和编程等多个领域......
  • wireshark 捕获 C# 上传的图片
    如何通过wireshark捕获C#上传的图片 一:背景1.讲故事这些天计划好好研究下tcp/ip,以及socket套接字,毕竟工控中设计到各种交互协议,如果只是模模糊糊的了解,对分析此类dump还是非常不利的,而研究协议最好的入手点就是用抓包工具wireshark,废话不多说,这篇通过wireshark提取......
  • Mininet|Protobuf|Bmv2|PI|P4c|Ptf搭建记录
    写在前面看个乐子软件:VMware17pro+Ubuntu20.04目前运行tutorials中basic例程没问题,但不保证完全正确安装网上p4的资料不算很多,github官方社区提供了搭建脚本tutorials/vm-ubuntu-20.04/user-dev-bootstrap.shatmaster·p4lang/tutorials(github.com),搭建过程一开始也参......
  • ASP.NET Core 8 的内存占用可以更低吗?
    MaoniStephens是.NET垃圾回收器(GC)的首席架构师之一,她在2023年8月份发表了一篇关于.NETGC新功能的博客文章,该功能称为DynamicAdaptionToApplicationSizes(DATAS),该功能将随.NET8一起提供。此功能将在应用运行时自动增加或减少服务器GC模式下的托管堆数量。它减少......
  • CF1887D Split 题解
    Problem-D-CodeforcesSplit-洛谷我现在水平好烂,再做下去自信心就全败没了先考虑\(Q=1\)怎么做?两种做法:暴力枚举分界点,左右判断暴力枚举\(\max\limits_{i=l}^{x}a_i\),找到最靠右边的分界点位置\(x\),判断是否\(\max\limits_{i=l}^{x}a_i<\min\limits......
  • cpp取系统时钟
    //test.cpp:定义控制台应用程序的入口点。//#pragmawarning(disable:4996)#include"stdafx.h"#include"time.h"#include"windows.h"#include<iostream>usingnamespacestd;void取系统时间(){ time_ttimer;//time_t实际是int64 str......
  • 创建一个双模式跨运行时的 JavaScript 包
    本文将指导你发布双模式、跨运行时的JavaScript包。了解如何创建与ESM和CommonJS以及Node.js、Deno和浏览器等不同运行时兼容的库。随着JavaScript开发的不断发展,人们越来越需要能在多种环境中运行的强大依赖包。在本文中,我们将探讨如何发布跨运行时、双模式的JavaScr......
  • pycharm文件中配置.gitignore后没有起作用,未生效
    原因:这是因为pycharm会自动运行gitadd.的功能,所以.gitignore修改后,需要手动清空cached的内容,然后再add一次,这时gitignore会起作用。解决办法:在pycharm命令里输入:gitrm-r--cached.#也可以指定文件清理缓存gitadd.慎用(以下可以不用操作):gitcommit-m"更新过滤规......
  • [ABC267F] Exactly K Steps 题解
    [ABC267F]ExactlyKSteps题解思路首先发现,如果对于查询\((u,k),k>0\)可行,那么对于\((u,k-1)\)也一定可行,因为往回走一步就可以了,所以对于一个点可以找到离它最远的点,根据直径的结论,这个点一定是直径的端点之一。为了方便做,以直径的端点之一为根,然后写一个K级祖......
  • CentOS7下快速升级至OpenSSH9.3p2安全版本
    之前的文章可供参考:CentOS7下快速升级OpenSSH至8.9p1安全版本一、CentOS7服务器上编译生成OpenSSH9.3p2的RPM包1、编译打包的shell脚本来源于该项目https://github.com/boypt/openssh-rpms复制(图片点击放大查看)unzipopenssh-rpms-main.zip-d/optcd/opt/cdop......