私はIObservable<bool>
を持っており、最後のn
アイテムがtrueに設定されているときに通知を受けたいと思います。Rxを使用してブール状態に登録
:
MyBool.Buffer(10).SelectMany(x => x).All(x => x).Subscribe(x => /*do something*/);
しかし、それは一度だけ発生させます。何とか解雇されているようです。
私はIObservable<bool>
を持っており、最後のn
アイテムがtrueに設定されているときに通知を受けたいと思います。Rxを使用してブール状態に登録
:
MyBool.Buffer(10).SelectMany(x => x).All(x => x).Subscribe(x => /*do something*/);
しかし、それは一度だけ発生させます。何とか解雇されているようです。
あなたは効果的に観測値をバッファリングして平坦化しています。それが今までに行ったものを発するよう.Buffer(10).SelectMany(x => x)
を呼び出すと、非動作と同様である
あなたがする必要がある何より、このようなものです:私はあなたがAで10 truesがある時はいつでも知りたいと思ったと仮定
MyBool
.Buffer(10, 1)
.Select(xs => xs.All(x => x))
.Where(x => x);
行があるので、11の場合は2回通知されます。
Buffer(10, 1)
の背後にある理由は、道Buffer
作品である - これは1
によって沿い10
要素と移動のバッファを提供します。もし私がBuffer(10)
をしたら、私は10の要素を取得し、10ずつ移動します。
Observable.Range(0, 5).Buffer(3)
を入力した場合は{0, 1, 2}, {3, 4}
となりますが、Observable.Range(0, 5).Buffer(3, 1)
の場合は{0, 1, 2}, {1, 2, 3}, {2, 3, 4}, {3, 4}, {4}
となります。
MyBool
.Buffer(3, 1)
.Select(xs => xs.All(x => x))
.Buffer(2, 1)
.Where(x => x[0] || x[1]);
:
これは、実際に働いていたが、あなたは説明してください可能性が
false
がtrues
はその後、これを試して後にスルー来るとき、あなたが知りたい場合はバッファに「1」をスキップする点は何ですか? – Sturm
10個の真実の行の後で、MyBoolがfalseに設定されているときに通知を実装するのに苦労しています。私はそれのために別のIObservableを必要とし、何とか現在の( 'MyBool')と結合しますか? – Sturm
@Sturm - 私は詳細を追加しました。 – Enigmativity