将两个 Combine 数组合并为一个数组
Merge two Combine Arrays into a Single Array
我有两种
let left: Future<[Int]>
let right: Future<[Int]>
我怎样才能将它们组合起来,这样我就有了一个连续的一维数组?
使用append
和merge
创建二维数组,没有明确的信息。确实是收集二维数组然后在 flatMap 内部使用 flatMap 的最佳方式,例如:
.collect().flatMap { arrays in arrays.flatMap { [=11=] } }
必须有更好的方法。
如果您有两个发布者发出您想要以某种方式组合的值,通常您可能需要两种类型的行为:(1) zip
- 等待每个发布者发出,或 (2) 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
发出时,输出将是 [11,44,22,33,55]
我有两种
let left: Future<[Int]>
let right: Future<[Int]>
我怎样才能将它们组合起来,这样我就有了一个连续的一维数组?
使用append
和merge
创建二维数组,没有明确的信息。确实是收集二维数组然后在 flatMap 内部使用 flatMap 的最佳方式,例如:
.collect().flatMap { arrays in arrays.flatMap { [=11=] } }
必须有更好的方法。
如果您有两个发布者发出您想要以某种方式组合的值,通常您可能需要两种类型的行为:(1) zip
- 等待每个发布者发出,或 (2) 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
发出时,输出将是 [11,44,22,33,55]