如何删除Swift数组中的所有nil元素?

时间:2015-07-22 18:49:17

标签: ios swift

基本方式无效。

std::ifstream

3 个答案:

答案 0 :(得分:89)

代码的问题是0 ..< list.count在循环开始时执行一次,list仍然包含其所有元素。每次删除一个元素时,list.count都会递减,但迭代范围不会被修改。你最终读得太过分了。

在Swift 4.1及更高版本中,您可以使用compactMap来丢弃序列的nil元素。 compactMap返回一组非可选值。

let list: [Foo?] = ...
let nonNilElements = list.compactMap { $0 }

在Swift 2中包括4.0,使用flatMapflatMap做同样的事情:

let list: [Foo?] = ...
let nonNilElements = list.flatMap { $0 }

如果您仍然需要一系列可选项,或者您仍在使用Swift 1,则可以使用filter删除nil元素:

list = list.filter { $0 != nil }

答案 1 :(得分:75)

在Swift 2.0中,您可以使用flatMap:

location.onhand

答案 2 :(得分:7)

现在在Swift 4.2中可以使用

openpyxl
  • list.flatMap {$ 0}已被弃用。
相关问题