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

C#如何按另一列表匹配优先级排序,再按字符串序降序排列

优化实现方案

方案1:抽离排序逻辑+使用Linq原生方法(可读性最高)

将匹配优先级计算的逻辑抽成独立的命名方法,逻辑意图无需阅读内部代码即可直接识别:

// 计算字符串在优先列表中的匹配排名,匹配返回对应索引,无匹配返回int.MaxValue
int GetPreferredOrderIndex(string input)
{
    var matchIndex = Array.FindIndex(preferred, 
        pref => input.Contains(pref, StringComparison.OrdinalIgnoreCase));
    return matchIndex == -1 ? int.MaxValue : matchIndex;
}

// 排序逻辑
var sortedThings = things
    .OrderBy(GetPreferredOrderIndex)
    .ThenByDescending(str => str, StringComparer.OrdinalIgnoreCase)
    .ToArray();

优化说明

  • 把原本嵌套在OrderBy中的手写循环逻辑抽成独立方法,方法名直接说明功能作用,可读性大幅提升
  • 用.NET原生的Array.FindIndex代替自定义for循环,减少冗余代码和出错概率
  • 原代码ThenByDescending(x => x.ToLower())优化为直接传入大小写不敏感的字符串比较器,避免额外生成小写字符串,性能和可读性均有提升

方案2:内联精简版(适合逻辑简单不想额外声明方法的场景)

var sortedThings = things
    .OrderBy(str => 
        Array.FindIndex(preferred, p => str.Contains(p, StringComparison.OrdinalIgnoreCase)) 
        is var idx and >=0 ? idx : int.MaxValue)
    .ThenByDescending(str => str, StringComparer.OrdinalIgnoreCase)
    .ToArray();

两种方案运行结果均完全符合示例要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 15:36:03