将两个组合数组合并为一个数组

时间:2021-04-22 15:14:15

标签: arrays swift combine flatmap

我有两种类型

let left: Future<[Int]>
let right: Future<[Int]>

如何将这些组合起来,以便获得一个连续的一维数组?

使用 appendmerge 创建二维数组,没有明确的信息。确实是收集 2D 数组然后在 flatMap 中使用 flatMap 的最佳方法,例如:

.collect().flatMap { arrays in arrays.flatMap { $0 } }

必须有更好的方法。

1 个答案:

答案 0 :(得分:2)

如果您有两个发布者发出想要以某种方式组合的值,您通常有两种可能需要的行为类型:(1) zip - 等待每个发布者发出,或 (2) {{ 1}} - 只要有人发出值就发出。

因此,就您而言,它可能是 combineLatest

zip

left.zip(right) .map { (l, r) in l + r) .sink { ... }

combineLatest

它们的行为相同,如果 left.combineLatest(right) .map { (l, r) in l + r) .sink { ... } left 都发出单个值(例如像 right 那样)。因此,如果 Future 发出 left 并且 [1,4] 发出 right,输出将是 [2,3,5]

不同之处在于之后会发生什么。

使用 [1,4,2,3,5],当 zip 发出下一个值时,例如 left,直到 [11,44] 发出值,例如 right,才会有输出,然后输出将是:[22,33,55].

使用 [11,44,22,33,55],只要 combineLatest 发出,输出将是 left,然后当 [11,44,2,3,5] 发出时,输出将是 right