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

如何按从最大负数到最大正数排序百分比字符串数组?

解决百分比字符串数组排序问题

你的问题出在两个关键错误上:

  1. 错误调用了 $0.string——$0 本身就是 String 类型,不存在 string 属性;
  2. 未去除字符串末尾的 % 符号,直接转 Double 会返回 nil,导致所有元素都被当作 0.0 处理,无法实现正确排序。

正确实现代码

先移除每个字符串中的 % 符号,再转换为数值类型进行比较排序:

var array: [String]? = ["-12.00%", "3.00%", "27.30%", "-8.37%"]

let sortedArray = array?.sorted(by: {
    // 移除百分号并转换为Double数值
    guard let value1 = Double($0.replacingOccurrences(of: "%", with: "")),
          let value2 = Double($1.replacingOccurrences(of: "%", with: "")) else {
        // 处理无效格式的字符串,默认将无效元素放在排序结果末尾
        return false
    }
    // 按数值升序排列,对应「最小负数在前,最大正数在后」的需求
    return value1 < value2
})

print(sortedArray ?? []) 
// 输出结果:["-12.00%", "-8.37%", "3.00%", "27.30%"]

代码细节说明

  • replacingOccurrences(of: "%", with: ""):清除字符串中的百分号,得到可转换为数值的纯数字字符串;
  • Double(...):将处理后的字符串转为数值类型,用于排序比较;
  • value1 < value2:按数值升序排序,恰好匹配你需要的排序逻辑;
  • guard 语句:处理格式无效的百分比字符串(如空串、非数字内容),避免程序崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 15:55:54