You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改C# GenerateHTML函数,传入3元素年份数组生成目标表格?

问题

我有一段生成HTML表格的C#函数(代码如下),当前生成的表格只有区域和单个年份的百分比列。现在需要修改该函数,当传入包含3个元素的年份数组时,生成对应3个年份百分比列的表格,但我对C#不太熟悉,请问该怎么修改?

原函数代码:

private string GenerateHTML(string year)
{
    var regions = RegionalList(year);
    if (!regions.Any()) return "";

    var rowHtmlString = regions.OrderByDescending(row => row.Capacity).Aggregate("", (current, row) => current + $@"
    <tr>
        <td>
           <p>{row.Region}</p>
        </td>
        <td>
           <p>{row.Percent.ToString("F1")}%</p>
        </td>
    </tr>
    ");
return rowHtmlString;
}

当前生成的表格结构示例:

区域单个年份百分比
华东区65.2%
华北区23.5%

修改后的代码及说明

以下是适配年份数组的修改版本,支持传入任意数量(这里是3个)的年份,生成多列百分比表格:

private string GenerateHTML(string[] years)
{
    // 存储每个区域对应各年份的百分比数据
    var regionYearData = new Dictionary<string, Dictionary<string, decimal>>();

    // 遍历所有年份,收集区域数据
    foreach (var year in years)
    {
        var regions = RegionalList(year);
        foreach (var region in regions)
        {
            if (!regionYearData.ContainsKey(region.Region))
            {
                regionYearData[region.Region] = new Dictionary<string, decimal>();
            }
            regionYearData[region.Region][year] = region.Percent;
        }
    }

    if (!regionYearData.Any()) return "";

    // 生成表头:区域列 + 各年份列
    var headerHtml = $@"
    <tr>
        <td><p>区域</p></td>
        {string.Join("", years.Select(year => $@"<td><p>{year}</p></td>"))}
    </tr>";

    // 按原逻辑对区域按Capacity降序排序
    var sortedRegions = regionYearData.Keys
        .OrderByDescending(region => 
        {
            // 找到该区域存在的第一个年份数据,获取Capacity用于排序
            foreach (var year in years)
            {
                var targetRegion = RegionalList(year).FirstOrDefault(r => r.Region == region);
                if (targetRegion != null) return targetRegion.Capacity;
            }
            return 0;
        });

    // 生成所有数据行
    var rowsHtml = string.Join("", sortedRegions.Select(region => 
    {
        // 生成当前区域对应各年份的百分比单元格
        var yearCells = string.Join("", years.Select(year => 
        {
            var percent = regionYearData[region].TryGetValue(year, out var value) ? value : 0;
            return $@"<td><p>{percent.ToString("F1")}%</p></td>";
        }));

        return $@"
    <tr>
        <td><p>{region}</p></td>
        {yearCells}
    </tr>";
    }));

    // 返回完整的表格行(如果需要包裹<table>标签,可自行添加)
    return headerHtml + rowsHtml;
}

关键修改点:

  1. 参数调整:将函数参数从单个string year改为string[] years,支持传入多个年份
  2. 数据整合:用双层字典regionYearData收集所有年份的区域百分比,确保每个区域在所有年份下的数据都能被统一处理
  3. 动态表头:根据传入的年份数组,自动生成对应年份的表头列
  4. 数据行生成:为每个区域生成对应所有年份的百分比单元格,无数据的年份默认显示0.0%(可修改为空白或其他占位符)
  5. 排序逻辑:保留原有的按Capacity降序规则,通过遍历年份找到对应区域的Capacity值实现排序

内容的提问来源于stack exchange,提问作者Ugur Catak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 07:20:17