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

优化字符串大小写变体分组函数:保留出现次数最多的变体

优化C#函数:保留大小写变体中出现次数最多的选项

我需要优化GetMostCommonItems函数,让它统计字符串列表中每个大小写变体组(例如apple/Apple/APPLE为同一组)内各变体的出现次数,最终只保留每组中出现次数最多的那个变体作为筛选选项。原函数逻辑是固定优先选小写、再首字母大写、最后全大写,现在要改成按实际出现次数来决定保留哪个。

优化后的代码

public static List<string> GetMostCommonItems(List<string> values)
{
    // 过滤空值,将大小写视为同一组分组
    var variantGroups = values
        .Where(value => !string.IsNullOrEmpty(value))
        .GroupBy(value => value, StringComparer.InvariantCultureIgnoreCase);

    // 每组内统计各原始变体的出现次数,选出次数最多的
    var mostCommonVariants = variantGroups
        .Select(group => 
            group.GroupBy(original => original)
                 .OrderByDescending(variantGroup => variantGroup.Count())
                 .First().Key);

    // 按字符串排序结果
    var result = mostCommonVariants.OrderBy(str => str).ToList();

    // 原列表包含空值时,添加null到结果
    if (values.Any(value => string.IsNullOrEmpty(value)))
    {
        result.Add(null);
    }

    return result;
}

优化说明

  1. 简化分组逻辑:
    直接用StringComparer.InvariantCultureIgnoreCase做分组依据,把所有大小写变体归为同一组,避免原代码中嵌套的字典结构,逻辑更直观,内存开销更低。

  2. 精准统计次数:
    在每个大小写组内,对原始字符串(保留原大小写格式)再次分组,统计每个变体的出现次数,再按次数降序排序后取第一个,确保拿到出现次数最多的变体。

  3. 空值处理优化:
    用Any替代FirstOrDefault判断原列表是否包含空值,代码更简洁,性能也更优。

  4. 平局情况处理(可选):
    如果同一组内多个变体出现次数相同(比如Apple和apple都出现3次),当前代码会取组内最先出现的变体。如果需要自定义优先级(比如优先小写、优先首字母大写),可以在OrderByDescending后添加ThenBy条件:

    // 优先选择小写变体
    .OrderByDescending(variantGroup => variantGroup.Count())
    .ThenBy(variantGroup => variantGroup.Key == variantGroup.Key.ToLower() ? 0 : 1)
    

    或者:

    // 优先选择首字母大写的变体
    .OrderByDescending(variantGroup => variantGroup.Count())
    .ThenBy(variantGroup => 
        char.IsUpper(variantGroup.Key[0]) && 
        variantGroup.Key.Substring(1).All(char.IsLower) ? 0 : 1)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:36:24