我刚开始使用Swift并使用选项。使用generateRandomArrayOfIntsAndNils()
后,努力计算测试数组中的nils数这就是我要采用的方法:
let array1: [Int?]
array1 = generateRandomArrayOfIntsAndNils()\
var total = 0
for i in array1 {
if(array1[i] == nil){
total += 1
}
}
print(total)
非常感谢任何建议或指导。
答案 0 :(得分:7)
你可以这样做:
let countNils = array1.filter({ $0 == nil }).count
答案 1 :(得分:4)
nil
值for case ...
除了已经提到的功能方法之外,您还可以使用for case ... in
循环有条件地增加total
计数器
let arr = [1, nil, 3, 4, nil, 6] // [Int?] inferred
var numberOfNilValues = 0
for case .none in arr { numberOfNilValues += 1 }
print(numberOfNilValues) // 2
for ... where
或者,for
循环与条件递增的where
子句相结合:
let arr = [1, nil, 3, 4, nil, 6]
var numberOfNilValues = 0
for e in arr where e == nil { numberOfNilValues += 1 }
print(numberOfNilValues) // 2
nil
值的数量也可能值得明确提一下,我们可以类似地使用上面的for case ...
方法来计算不 nil
的值的数量(即, .some
):
let arr = [1, nil, 3, 4, nil, 6]
var numberOfNonNilValues = 0
for case .some in arr { numberOfNonNilValues += 1 }
print(numberOfNonNilValues) // 4
对于这种情况,我们也可以使用简写(通配符可选模式)_?
形式:
var numberOfNonNilValues = 0
for case _? in arr { numberOfNonNilValues += 1 }
print(numberOfNonNilValues) // 4
答案 2 :(得分:2)
效率更高,因为它不必创建包含所有nil
s的中间数组:
let array1: [Int?] = [1,2,3,nil,nil]
let nilCount = array1.reduce(0) { $0 + ($1 == nil ? 1 : 0) }
print(nilCount) // 2
工作原理:
reduce
以初始值开头并遍历数组中的每个元素$0
是运行总计,$1
是当前元素)答案 3 :(得分:0)
愚蠢的解决方案竞赛的下一个解决方案:)
解释flatMap
删除了零值:
let arr = [1, nil, 3, 4, nil, 6]
print(arr.count - arr.flatMap{$0}.count
// 2