如何通过重复较短的序列来压缩可观察对象

问题描述 投票:-1回答:2

我试图弄清楚如何获得以下结果:

A: -a--b--c-d--e-f->
B: --1-2-3-|
=: --a-b--c-d--e-f->
 : --1-2--3-1--2-3->

其中A,B是输入流,'='表示输出流(作为元组A,B)

加反之亦然:

A: -a-b-|
B: --1--2-3-4--5--6-7->
=: --a--b-a-b--a--b-a->
 : --1--2-3-4--5--6-7->

因此,以纯文本格式-我正在寻找一种行为类似于zip运算符,但具有“重播”较短序列以匹配较长序列的功能。

任何想法如何解决这个问题?

作为一个新手,我正在解决这个问题,这是我目前正在尝试的事情:

let a = PublishSubject<String>()
let b = PublishSubject<String>()

let counterA = a.scan(0) { (memo, _) -> Int in memo + 1 }
let counterB = b.scan(0) { (memo, _) -> Int in memo + 1 }

let a1 = Observable.zip(a.asObservable(), counterA).map { (0, $0, $1) }
let b1 = Observable.zip(b.asObservable(), counterB).map { (1, $0, $1) }

Observable.merge([a1, b1])
.subscribe({ print("#\(#line):", $0) })
.disposed(by: disposeBag)

a.onNext("a")
b.onNext("1")
a.onNext("b")
b.onNext("2")
a.onNext("c")
b.onNext("3")
b.onCompleted()
a.onNext("d")
a.onNext("e")
a.onNext("f")
a.onCompleted()
swift rx-swift
2个回答
0
投票

如有疑问,您可以随时创建自己的运算符:


0
投票
  • Swift 5.1 /合并*
© www.soinside.com 2019 - 2024. All rights reserved.