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

VB.NET 实现排除已完成行取最小众数 同频率优先取0或次小值

代码修正方案

错误点说明

  • 过滤逻辑错误:ColumnsFinished是与ColumnValues索引一一对应的标记列表,原代码用ColumnsFinished.Contains(i)判断完全不符合业务逻辑,无法正确过滤已完成行
  • 排序逻辑缺漏:未显式处理频率一致时0的最高优先级规则,若存在小于0的数值会返回负数而非0,不符合需求

修正后代码

Dim ColumnValues As New List(Of Integer)
Dim ColumnsFinished As New List(Of Boolean)

ColumnValues.Clear()
ColumnValues.Add(2)
ColumnValues.Add(1)
ColumnValues.Add(2)
ColumnValues.Add(2)
ColumnValues.Add(0)
ColumnValues.Add(0)
ColumnValues.Add(0)
ColumnsFinished.Add(False)
ColumnsFinished.Add(False)
ColumnsFinished.Add(False)
ColumnsFinished.Add(False)
ColumnsFinished.Add(False)
ColumnsFinished.Add(False)
ColumnsFinished.Add(False)

' 按索引匹配过滤未标记为已完成的有效数值
Dim validValues = ColumnValues.Where(Function(val, idx) Not ColumnsFinished(idx)).ToList()

Dim mostCommon As Integer = validValues.
    GroupBy(Function(x) x).
    OrderByDescending(Function(grp) grp.Count()). ' 优先按出现频率倒序
    ThenBy(Function(grp) If(grp.Key = 0, 0, 1)). ' 频率相同时0优先级最高
    ThenBy(Function(grp) grp.Key). ' 其余数值按从小到大排序
    Select(Function(grp) grp.Key).
    FirstOrDefault()

逻辑说明

  • 过滤逻辑完全匹配ColumnsFinished的索引标记规则,对应位置标记为True的数值不会参与统计
  • 你提供的测试用例中0和2出现频率均为3次,会优先返回0,符合需求
  • 若所有数值频率一致且不存在0,会自动返回最小的数值
  • 额外兼容了存在负数的场景:哪怕有比0更小的负数,只要出现频率相同,也会优先返回0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:48:00