combineLatest
は、3つのストリームをすべて1に結合する必要がある場合に役立ちます。出力ストリームが3つ必要な場合は、withLatestFrom
またはsample
としてください。 withLatestFrom
を使用すると、ソースであるsample
を直接組み合わせて元の値を出力するセレクタ関数を記述できます。サンプルと比較してwithLatestFrom
のパラメータを逆にする必要があることに注意してください。
2つのソースが非常に近い連続して放出されたときに、新しいストリームがただ1つの値を放出したいと思うかもしれません。 debounce
でこれを行うことができます。
combineLatest
ためのコードまっすぐ前方本当にです:
Rx.Observable.combineLatest(source1, source2, source3, (s1, s2, s3) => ...)
.debounce(10)
結果で:
Stream 1: 12:30 ------ 15:30 -- 16:00 ----------------- 19:00
Stream 2: 12:30 --------------- 16:00 ------ 17:30 ----------
Stream 3: -------------15:30 -------------------------- 19:00
| |
V V
Stream: 12:30 ------ 15:30 -- 16:00 -------17:30----- 19:00
我々は3つのストリームをしたい場合は、私たちがwithLatestFrom
を使用します。
var streams = Rx.Observable.merge(source1, source2, source3);
s1 = source1.sample(sources).debounce(10);
s2 = source2.sample(sources).debounce(10);
s3 = stream3.sample(sources).debounce(10);
か、我々の場合withLatestFrom
:
中
s1 = streams.withLatestFrom(source1).debounce(10);
結果:
Stream 1: 12:30 ------ 15:30 -- 16:00 ----------------- 19:00
Stream 2: 12:30 --------------- 16:00 ------ 17:30 ----------
Stream 3: -------------15:30 -------------------------- 19:00
| |
V V
Stream 1: 12:30 ------ 15:30 -- 16:00 ------ 16:00 ---- 19:00
Stream 2: 12:30 -------12:30 -- 16:00 ------ 17:30 ---- 17:30
Stream 3: -------------15:30 -- 15:30 ------ 15:30 ---- 19:00
私はあなたが "括弧は空を意味する" との意味を100%わかりません。このような大理石が欲しいですか?
Stream 1: a ---- b ------------ c --------- d ---------
Stream 2: g ---- i -----k------ l --------- m ---------
Stream 3: h ---- j ------------ i ----u---- a ---------
| |
V V
Stream 1: a ---- b -----_------ c ----_---- d ---------
Stream 2: g ---- i -----k------ l ----_---- m ---------
Stream 3: h ---- j -----_------ i ----u---- a ---------
_
は空の要素ですか?
source1.sample(Rx.Observable.merge(source1, source2, source3))
.debounce(10)
.startWith("_")
.publish(xs => xs.zip(xs.skip(1)), (a, b) => a === b ? "_", b)
私たちは、その後、sample
を使用しますが、重複する値をフィルタリングし、空の要素に置き換えることができます。これを行うには、最後の2つの要素を比較する小さなトリックを使用します。等しい場合は空の値を挿入します。
多分あなたは 'merge'' concat'のようなsmthを必要としますか? – xgrommx