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

C#列表补全与项目周度问题统计图表开发技术咨询

针对你提出的两个需求,我整理了具体的实现方案,希望能帮到你:

1. C# List 处理与计数器维护方案

要实现将list A中缺失或不相等的值按顺序添加至list B,同时维护计数器的需求,我们可以通过按顺序遍历对比的方式来处理,确保list B的顺序和list A一致,同时正确更新计数器。

核心思路

  • 遍历list A的每个元素,同时跟踪list B的当前索引位置
  • 对比list B当前索引的元素与list A的当前元素:
    • 如果list B索引越界(说明B比A短,后续元素缺失),或者元素不相等,则将A的元素插入到B的对应位置,并递增计数器
    • 如果元素相等,则跳过该元素,仅移动B的索引,计数器保持不变

代码示例

List<int> listA = new List<int> { 1, 2, 4, 5, 7 };
List<int> listB = new List<int> { 1, 3, 5 };
int counter = 0;

int bIndex = 0;
foreach (var item in listA)
{
    // 检查B的当前位置是否无匹配元素
    if (bIndex >= listB.Count || listB[bIndex] != item)
    {
        listB.Insert(bIndex, item);
        counter++;
    }
    else
    {
        // 元素匹配,移动B的索引继续对比
        bIndex++;
    }
}

// 输出结果验证
Console.WriteLine("处理后的List B: " + string.Join(", ", listB));
Console.WriteLine("最终计数器值: " + counter);

结果说明

运行上述代码后,listB会变为 [1, 2, 3, 4, 5, 7],计数器值为3(因为插入了2、4、7三个元素)。


2. 三折线问题趋势图表开发方案

你已经有了每周新增和每周关闭问题的列表,接下来只需要计算累计开放问题数,再通过图表库生成三条折线即可。

第一步:计算累计开放问题数

累计开放问题数的逻辑是:当前累计 = 上周累计 + 本周新增 - 本周关闭,注意要保证累计数不会为负数(如果某周关闭数超过新增数)。

// 假设你已有的两个数据列表
List<int> weeklyNewIssues = new List<int> { 10, 15, 8, 12, 20 };
List<int> weeklyClosedIssues = new List<int> { 5, 7, 9, 10, 14 };
List<int> cumulativeOpenIssues = new List<int>();

int runningTotal = 0;
for (int i = 0; i < weeklyNewIssues.Count; i++)
{
    runningTotal += weeklyNewIssues[i] - weeklyClosedIssues[i];
    // 避免累计数为负
    runningTotal = Math.Max(runningTotal, 0);
    cumulativeOpenIssues.Add(runningTotal);
}

第二步:生成三折线图表

下面以.NET WinForms自带的Chart控件为例,展示如何创建三条折线:

// 初始化Chart控件(如果是WinForms项目)
System.Windows.Forms.DataVisualization.Charting.Chart issueTrendChart = new System.Windows.Forms.DataVisualization.Charting.Chart();
issueTrendChart.Dock = DockStyle.Fill;

// 添加图表区域
var chartArea = new System.Windows.Forms.DataVisualization.Charting.ChartArea("IssueTrends");
issueTrendChart.ChartAreas.Add(chartArea);

// 1. 添加「每周新增问题」折线
var newSeries = new System.Windows.Forms.DataVisualization.Charting.Series("每周新增问题");
newSeries.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
newSeries.Color = Color.Blue;
for (int i = 0; i < weeklyNewIssues.Count; i++)
{
    newSeries.Points.AddXY($"第{i+1}周", weeklyNewIssues[i]);
}
issueTrendChart.Series.Add(newSeries);

// 2. 添加「每周已关闭问题」折线
var closedSeries = new System.Windows.Forms.DataVisualization.Charting.Series("每周已关闭问题");
closedSeries.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
closedSeries.Color = Color.Green;
for (int i = 0; i < weeklyClosedIssues.Count; i++)
{
    closedSeries.Points.AddXY($"第{i+1}周", weeklyClosedIssues[i]);
}
issueTrendChart.Series.Add(closedSeries);

// 3. 添加「累计开放问题」折线(加粗突出)
var cumulativeSeries = new System.Windows.Forms.DataVisualization.Charting.Series("累计开放问题");
cumulativeSeries.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
cumulativeSeries.Color = Color.Red;
cumulativeSeries.BorderWidth = 2;
for (int i = 0; i < cumulativeOpenIssues.Count; i++)
{
    cumulativeSeries.Points.AddXY($"第{i+1}周", cumulativeOpenIssues[i]);
}
issueTrendChart.Series.Add(cumulativeSeries);

// 添加图例
var legend = new System.Windows.Forms.DataVisualization.Charting.Legend();
issueTrendChart.Legends.Add(legend);

// 将Chart添加到窗体
this.Controls.Add(issueTrendChart);

其他图表库适配

如果你使用OxyPlot、Telerik等第三方库,核心逻辑完全一致:先计算累计数据,再分别创建三个折线系列并绑定数据即可,只是API调用会略有不同。


内容的提问来源于stack exchange,提问作者Mr.Human

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:28:45