如何按从最大负数到最大正数排序百分比字符串数组?
解决百分比字符串数组排序问题
你的问题出在两个关键错误上:
- 错误调用了
$0.string——$0本身就是 String 类型,不存在string属性; - 未去除字符串末尾的
%符号,直接转 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
相关产品推荐
相关产品推荐

