使用flatMap和compactMap获得不同的结果

时间:2018-11-26 18:11:07

标签: swift flatmap

我有struct A类型的对象的数组A

struct Caste {
    var arr = [1,2]
}

let siri =  [Caste(), Caste(), Caste()]

现在我想要一个包含每个对象数组的所有元素的数组,如下所示:

let re1 = siri.compactMap { $0.arr }
print("COMPACT: \(re1)")
let re2 = siri.flatMap { $0.arr }
print("FLAT: \(re2)")

结果:

COMPACT: [[1, 2], [1, 2], [1, 2]] FLAT: [1, 2, 1, 2, 1, 2]

在Swift 4.1中不推荐使用flatMap,我尝试使用compactMap,但是它给的是数组而不是单个数组。

当我通过flatMap获取时,如何通过compactMap实现。

1 个答案:

答案 0 :(得分:1)

flatMap被分为自身和compactMapflatMap用于展平数组,而compactMap的目的是获取[T?]数组,并删除构成[T]数组的所有nil个对象。计数为<=原始计数,具体取决于钉子的数量。