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

如何在.NET Framework 4中计算List(Of ZZZ)里Top N周的Cost总和并统计实际选中的周数

我来帮你搞定这个需求!咱们一步步来修改代码,既实现Top N周的Cost求和,又能统计实际选中的周数,完全兼容.NET Framework 4环境。

核心思路

要实现你的需求,关键是先锁定最大的N个不同周数,再筛选对应项求和:

  • 先提取集合里所有不重复的Week值,按降序排序(这样最大的周数排在最前面)
  • 取排序后的前NumOfWeeksToSelect个周数,得到目标周列表
  • 筛选原集合中属于这些目标周的项,计算它们的Cost总和
  • 实际选中的周数就是目标周列表的元素个数(自动处理N远超实际不同周数的情况)

修改后的完整代码

把你原来的Total = ...那部分替换成下面的代码,同时添加统计实际周数的逻辑:

Imports System
Imports System.Linq
Imports System.Collections.Generic

Public Module Module1
    Public Sub Main()
        Dim MyZZZ As New List(Of ZZZ)
        Dim Total As Single
        Dim NumOfWeeksToSelect As Integer = 2

        MyZZZ.Add(New ZZZ With {.Cost = 1.1, .Week = 100})
        MyZZZ.Add(New ZZZ With {.Cost = 2.2, .Week = 100})
        MyZZZ.Add(New ZZZ With {.Cost = 3.3, .Week = 99})
        MyZZZ.Add(New ZZZ With {.Cost = 4.4, .Week = 99})
        MyZZZ.Add(New ZZZ With {.Cost = 5.5, .Week = 95})
        MyZZZ.Add(New ZZZ With {.Cost = 6.6, .Week = 95})
        MyZZZ.Add(New ZZZ With {.Cost = 7.7, .Week = 95})
        MyZZZ.Add(New ZZZ With {.Cost = 8.8, .Week = 90})
        MyZZZ.Add(New ZZZ With {.Cost = 9.9, .Week = 80})
        MyZZZ.Add(New ZZZ With {.Cost = 10.10, .Week = 70})

        ' 获取Top N的周数列表
        Dim topWeeks = MyZZZ.Select(Function(t) t.Week).Distinct().OrderByDescending(Function(w) w).Take(NumOfWeeksToSelect).ToList()
        
        ' 计算这些周的Cost总和
        Total = MyZZZ.Where(Function(t) topWeeks.Contains(t.Week)).Sum(Function(t) t.Cost)
        
        ' 统计实际选中的周数
        Dim selectedWeekCount = topWeeks.Count

        Console.WriteLine($"实际选中的周数:{selectedWeekCount}")
        Console.WriteLine($"Top {NumOfWeeksToSelect}周的Cost总和:{Total}")
    End Sub

    Private Class ZZZ
        Public Cost As Single
        Public Week As Integer
    End Class
End Module

代码说明

  • Distinct():确保我们只处理不同的周数,避免重复计算同一个周
  • OrderByDescending(Function(w) w):将周数从大到小排序,保证最大的周数优先被选中
  • Take(NumOfWeeksToSelect):提取前N个最大的周数
  • Where(Function(t) topWeeks.Contains(t.Week)):筛选出原集合中属于目标周的所有项
  • selectedWeekCount = topWeeks.Count:自动处理N超过实际不同周数的情况(比如N=100时,会返回所有6个不同的周数)

测试结果

  • 当NumOfWeeksToSelect = 2时,实际选中周数是2,总和为1.1+2.2+3.3+4.4=11.0
  • 当NumOfWeeksToSelect = 3时,实际选中周数是3,总和为1.1+2.2+3.3+4.4+5.5+6.6+7.7=30.8
  • 当NumOfWeeksToSelect = 100时,实际选中周数是6,总和为所有项的Cost之和

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 04:52:31