我试图弄清楚如何获得以下结果:
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()
如有疑问,您可以随时创建自己的运算符: