You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

为何字符串数组prodIDArr调用max()方法得到最大值为9而非10?

为什么字符串数组取max()得到9而不是10?

这事儿的核心原因是字符串的比较逻辑和数字完全不一样!你用的max()方法默认是按**字典序(lexicographical order)**来比较字符串的,而不是按数值大小。

具体到你的例子:

  • 当比较"9"和"10"时,字符串比较会从第一个字符开始逐一对比ASCII值:'9'的ASCII码是57,'1'的ASCII码是49。因为57 > 49,所以直接判定"9"比"10"大,根本不会去看"10"的第二个字符。这就是为什么你得到的max是"9"而不是"10"。

解决方法

有两种常用的修复方式:

  1. 先把字符串转成数字再取最大值
    把数组里的每个元素转换成数字类型,再调用max(),这样就会按数值大小比较了:

    let prodIDArr = ["1","2","3","4","5","6","7","8","9","10"]
    let maxVal = prodIDArr.map { Int($0)! }.max() // 结果是10
    
  2. max()传一个自定义比较器
    直接告诉max()应该怎么比较元素,不用默认的字典序:

    let maxVal = prodIDArr.max { Int($0)! < Int($1)! } // 结果是"10"
    

    这种方式会保留元素的字符串类型,但按数值逻辑比较大小。

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

火山引擎 最新活动