2017-02-27 15 views
1

私はIObservable<bool>を持っており、最後のnアイテムがtrueに設定されているときに通知を受けたいと思います。Rxを使用してブール状態に登録

私はのようなものをしようとしていることについては

MyBool.Buffer(10).SelectMany(x => x).All(x => x).Subscribe(x => /*do something*/); 

しかし、それは一度だけ発生させます。何とか解雇されているようです。

答えて

3

あなたは効果的に観測値をバッファリングして平坦化しています。それが今までに行ったものを発するよう.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]); 

results

+0

これは、実際に働いていたが、あなたは説明してください可能性がfalsetruesはその後、これを試して後にスルー来るとき、あなたが知りたい場合は

バッファに「1」をスキップする点は何ですか? – Sturm

+0

10個の真実の行の後で、MyBoolがfalseに設定されているときに通知を実装するのに苦労しています。私はそれのために別のIObservableを必要とし、何とか現在の( 'MyBool')と結合しますか? – Sturm

+0

@Sturm - 私は詳細を追加しました。 – Enigmativity

関連する問題