给定一个可选整数数组,我计算非nil的值,直到(并包括)给定的索引。我把代码写在下面。有别的方法可以得到同样的结果吗?一种更快捷的方式?
下面是我的代码:func getValuesCount(upTo index: Int, in values: [Int?]) -> Int {
return values[0 ... index].filter { value in return value != nil }.count
}
一个稍微简化的方法是使用compactMap
而不是显式检查nil
的值。即使传入的索引大于数组,也可以使用prefix
来获取前n个值。当只有一行正确类型的结果时,return
是可选的。
func getValuesCount(upTo index: Int, in values: [Int?]) -> Int {
values.prefix(index).compactMap { $0 }.count
}
参数名称upTo
表示范围应该是..<index
而不是...index
。因此,使用prefix(index)
与使用..<index
类似。如果你想包含index
,那么你可能需要prefix(index + 1)
。