申し訳ありませんが、タイトルがあまり明確でない場合、私は何も考えられませんでした...Rxでは、一定期間後に最新のアイテムをグループ化する方法は?
私はIObservable<char>
の形式でユーザー入力を受け取りました。 IObservable<char[]>
のように、ユーザーが入力を1秒以上停止するたびに文字をグループ化します。次のように入力するのであれば、例えば、:
h
e
l
l
o
(pause)
w
o
r
l
d
(pause)
!
(pause)
私があることが観測可能な出力が欲しい:
['h', 'e', 'l', 'l', 'o']
['w', 'o', 'r', 'l', 'd']
['!']
私は解決策は非常に単純である疑いがあるが、私は見つけることができません適切なアプローチ...私はBuffer
、GroupByUntil
、Throttle
などを使用しようとしましたが、役に立たなくなりました。
ご迷惑をおかけします。
編集:私はほとんど働く何かを持っている:
_input.Buffer(() => _input.Delay(TimeSpan.FromSeconds(1)))
.ObserveOnDispatcher()
.Subscribe(OnCompleteInput);
をしかし、私は新しい文字が入力されるたびにリセットされる遅延を必要とする...
ありがとう、それは素晴らしい作品です。私のソリューションよりはるかにエレガントです。実際、私のソースはすでに暑いです(それは 'Subject'です)。 'Publish()。RefCount()'の使用による影響が... –
@ThomasLevesqueあなたのソースがすでに熱くなっていれば、Publish/RefCountは無駄なラッパー層に過ぎないと思います。これを一般的な関数として使用したい場合は、アプリケーションに問題があることが示されていない限り、そのまま残しておきます。これを一度だけ使用する場合は、パラメータを 'hotSource'に変更し、ドキュメンテーションコメントにメモを残して、Publish/RefCountを安全に削除する必要があります。 –