我认为,这是一件容易的事,但现在我的大脑正在融洽。
The problem
Given the following IObservable<int>
Stream:
1
1
0
0
0
1
0
0
1
0
1
我想将其分为<代码>。 IObservable<IEvidable<int>> 表格的简化
<0>0
<0>0
<0>0
只要有零件,就只添加到可以计算的数字中,当出现1份清单时,就开始编制新的清单;这是对我的实际问题所作的比较更清洁的定义。
My approach so far
我认为,一个很好的解决办法是首先将其转换成<代码>。 IObservable<IObservable<int>>via the Window
methods and subsequently use ToEvidable
, but somehow I no it do it do it. I used Zip
and Skip(1)
to have a diff to final elements, I used Dis本untilChanged(
. 我把我所尝试的所有变数都留给你......
也许我最接近的是这一法典:
int[] ints = new[] { 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1 };
var observable = Observable.Interval(TimeSpan.FromMilliseconds(1000)).Take(11).Select(i => ints[i]);
Subject<int> subject = new Subject<int>();
observable.Subscribe(subject);
var observableDiff = subject.Skip(1).Zip(subject, (n, p) => new { Previous = p, Next = n });
var windows = observable.Window(() => observableDiff.Where(x => x.Next == 1));
int index = 0;
windows.Subscribe(window =>
{
Console.WriteLine(string.Format("new window [{0}] ", index++));
window.Subscribe(number => Console.WriteLine(number));
});
这种回报是好的,但不幸的是,它最终坠毁。
new window [0]
1
new window [1]
1
0
0
0
new window [2]
1
0
0
new window [3]
1
0
new window [4]
new window [5]
new window [6]
new window [7]
new window [8]
new window [9]
<-- it goes on here until window ~ [80] with a stackoverflow exception
如果在我的法典中出现这种ug,我会达到......。
任何帮助都将受到高度赞赏。
Edit:我使用Rx-Experimental,但并没有改变(由LinqPad检查)。
Edit2:稍微改变了问题,以更好地突出我的问题,令人不安。 我也更新了解决办法。