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

F#中如何对字符串元组构成的列表进行排序

实现方法

核心逻辑分两步处理:

  • 逐个调整每个二元组内部的字符串顺序:按忽略大小写的字典序对比两个字符串,把更小的放在元组第一位,更大的放在第二位
  • 对调整完内部顺序的元组列表排序:排序时同样用忽略大小写的规则,先对比元组第一位,第一位相等时再对比第二位

直接用F#内置的列表映射和自定义排序函数即可实现,完整代码如下:

let sortPairs (pairs : (string * string) list) =
    // 忽略大小写的字符串比较函数,返回-1/0/1对应小于/等于/大于
    let compareIgnoreCase s1 s2 =
        System.String.Compare(s1, s2, System.StringComparison.OrdinalIgnoreCase)
    
    pairs
    // 调整每个元组内部的顺序
    |> List.map (fun (a, b) ->
        if compareIgnoreCase a b > 0 then (b, a) else (a, b))
    // 按规则对元组列表排序
    |> List.sortWith (fun (x1, y1) (x2, y2) ->
        let firstCompare = compareIgnoreCase x1 x2
        if firstCompare <> 0 then firstCompare
        else compareIgnoreCase y1 y2)
效果验证

对应给出的两个测试用例,运行结果完全符合预期:

// 测试用例1
sortPairs [("Derek", "Christopher")]
// 输出:val it : (string * string) list = [("Christopher", "Derek")]

// 测试用例2
sortPairs [("Parker", "Derek"); ("dora", "derek")]
// 输出:val it : (string * string) list = [("derek", "dora"); ("Derek", "Parker")]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 07:33:24