如何实现String数组转Int数组:空值转0,不可转换元素直接移除?
Swift String数组转符合规则的Int数组最优实现
现有代码存在的问题
你当前的实现有两个明显缺陷:
- 遇到无法转换为Int的非空字符串(比如示例中的
"x")时,Int(current)!强制解包会直接触发运行时崩溃 - 没有实现「无法转换为Int的元素直接移除」的需求规则
最优实现方案
使用Swift标准库的compactMap即可单次遍历完成全部逻辑,既保证安全又兼顾性能,时间复杂度为O(n):
func convertValues(_ number: [String]) -> [Int] { return number.compactMap { current in // 空字符串直接返回0 if current.isEmpty { return 0 } // 转换成功返回对应Int,转换失败返回nil会被compactMap自动过滤 return Int(current) } }
如果偏好更精简的写法,可以用三元运算符简化为单行闭包:
func convertValues(_ number: [String]) -> [Int] { number.compactMap { $0.isEmpty ? 0 : Int($0) } }
效果验证
输入示例["1","2","","","x"]调用该方法后,输出结果为[1,2,0,0],完全符合所有转换规则。
内容的提问来源于stack exchange,提问作者Josué H.
相关产品推荐
相关产品推荐

