如何修改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; }
关键修改点:
- 参数调整:将函数参数从单个
string year改为string[] years,支持传入多个年份 - 数据整合:用双层字典
regionYearData收集所有年份的区域百分比,确保每个区域在所有年份下的数据都能被统一处理 - 动态表头:根据传入的年份数组,自动生成对应年份的表头列
- 数据行生成:为每个区域生成对应所有年份的百分比单元格,无数据的年份默认显示
0.0%(可修改为空白或其他占位符) - 排序逻辑:保留原有的按
Capacity降序规则,通过遍历年份找到对应区域的Capacity值实现排序
内容的提问来源于stack exchange,提问作者Ugur Catak
相关产品推荐
相关产品推荐

