计算Int Optionals的arrary中的nil值的数量

时间:2017-01-26 19:12:17

标签: arrays swift

我刚开始使用Swift并使用选项。使用generateRandomArrayOfIntsAndNils()

后,努力计算测试数组中的nils数

这就是我要采用的方法:

let array1: [Int?]
array1 = generateRandomArrayOfIntsAndNils()\

var total = 0

for i in array1 {
    if(array1[i] == nil){
    total += 1
    }
}

print(total)

非常感谢任何建议或指导。

4 个答案:

答案 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
  • 开始计数
  • 如果元素为nil,则在运行总计中加1($0是运行总计,$1是当前元素)

答案 3 :(得分:0)

愚蠢的解决方案竞赛的下一个解决方案:)

解释flatMap删除了零值:

let arr = [1, nil, 3, 4, nil, 6]

print(arr.count - arr.flatMap{$0}.count 
// 2