2016-06-24 17 views
0

私はこれをどのようにフレーズするか分からないので、間違ってしまった場合はごめんなさい。 私たちはこのようになり言うよ一連のイベントを持っている:Rx動的にスライディングバッファー

0,1,2,3,4,5,6,7,8,9、...

私が提供したいです私のプログラムは、次のようなバッファを返すIObservableを持っています:

[0,1]、[0,1,2]、[0,1,2,3]、[1,2、 3,4]、[2,3,4,5]、[3,4,5,6]、...

または他の最大バッファサイズではありません。4.バッファでフィードできたらあなたがタイムバッファリングでできるような議論は簡単でしょうが、そのためのオーバーロードはないので、シーケンスを手動で構築しようとしました:

target.LogEvents.Buffer(1,1).Take(1).Concat(target.LogEvents.Buffer(2,1).Take(1)).Concat(target.LogEvents.Buffer(3,1).Take(1)).Concat(target.LogEvents.Buffer(4, 1)).Subscribe(...); 

しかし、これはうまくいかなかった。それは私に与えた

[0]、[1,2]、[3,4,5]、[6,7,8,9]、[7,8,9,10]、....

シーケンスを生成するにはどうすればよいですか?

+0

私はあなたがこの昨日の質問を見つけられると思っています(_ifは完全ではない、そして何とか_)有用です! –

+0

http://stackoverflow.com/questions/37993119/printing-all-the-possibilities-of-dimensions –

+0

@TalhaIrfanは本当にありません。それは、与えられたサイズの配列の順列を生成する方法を示していますが、これは私が求めているものではありません。 – Benjamin

答えて

2

これは機能しますか?

IObservable<IEnumerable<int>> query = 
    source 
     .Scan(Enumerable.Empty<int>(), (a, x) => 
      a.Concat(new [] { x }).TakeLast(4).ToList()); 

これが機能するには、「Rx-Main」と「Ix-Main」の両方をNuGetする必要があります。

+0

ありがとう!それは奇妙なものです。以前はスキャンをあまり使わなかった。 Ix-Mainはとてもいいですね。 – Benjamin