使用此选项,Rx生成一系列0到99之间的随机数。
var R = new Random();
var ints = Observable.Interval(TimeSpan.FromSeconds(1));
var RandomNos = ints.Select(i=> R.Next(100)); // was new Random().Next(100)
RandomNos.Subscribe(r=> Console.Write(r+ ","));
1,75,49,23,97,71,45,19,93,66,40,14,88,62,36,10,84
当我连续得到6个以上50个数字时,我想捕捉/检测。Rx能做到吗?
RandomNos.?????()
.Subscribe(l=> Console.WriteLine ("You got 6 more-than-50 numbers in a row"));
实现这一点的一种方法是使用Buffer
方法。
var random = new Random();
var result = Observable.Interval(TimeSpan.FromSeconds(1))
.Select(i => random.Next(100))
.Buffer(6, 1)
.Where(buffer => buffer.All(n => n > 50))
如果你试图检测的不是6行中的K
行,其中K真的非常大,那么你可能想用Window
来做一些事情,但由于这里K=6,所以最容易按照我的建议去做。
此外,请注意,从{0,1,…,99}中一致得出的数字大于50的概率是49/100,而不是1/2。
为了好玩,这里有一个只对一行中的任何"n"使用单个计数器的计数器-它保持超过50的数字的连续计数-Take(1)
在第一次出现时完成流。
RandomNos.Scan(0, (a,x) => x > 50 ? ++a : 0)
.Where(x => x == 6)
.Take(1)
.Subscribe(_ => Console.WriteLine("You got 6 more-than-50 numbers in a row"));