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

Swift优化咨询:统计可选整数数组指定索引内非nil元素数量

更符合Swift风格的实现方案

你的需求是统计可选整数数组中从起始位置到指定索引(包含该索引)范围内的非nil元素数量,原代码存在越界崩溃的风险,这里提供几种更Swift化且更安全的实现方式:

方式一:用compactMap简化计数

compactMap会自动过滤数组中的nil元素并返回非可选值的数组,搭配prefix能确保不会越界(prefix(index+1)表示取前index+1个元素,会自动适配数组实际长度):

func getValuesCount(upTo index: Int, in values: [Int?]) -> Int {
    values.prefix(index + 1).compactMap { $0 }.count
}

方式二:用reduce高效计数

如果不想创建中间数组,reduce可以直接累加非nil元素的数量,在处理大型数组时性能更优:

func getValuesCount(upTo index: Int, in values: [Int?]) -> Int {
    values.prefix(index + 1).reduce(0) { result, element in
        result + (element != nil ? 1 : 0)
    }
}

也可以简化成更紧凑的闭包写法:

func getValuesCount(upTo index: Int, in values: [Int?]) -> Int {
    values.prefix(index + 1).reduce(0) { $0 + ($1 != nil ? 1 : 0) }
}

关键优化点

  1. 避免越界崩溃:原代码中values[0...index]当index >= values.count时会直接崩溃,prefix(index+1)会自动截断为数组实际长度,安全性更高。
  2. 语义更清晰:prefix明确表达“取前N个元素”的意图,比手动写范围切片更易读。
  3. 贴合Swift风格:利用标准库的高阶函数替代手动遍历,代码更简洁,契合Swift的函数式编程习惯。

内容的提问来源于stack exchange,提问作者Thomas H.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 08:35:33