Используйте это, 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"));
2 ответа
Один из способов сделать это - использовать {{X0} } метод.
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"));
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.