RX: Stateful transform of sequence, e.g. exponential moving average

后端 未结 3 2017
日久生厌
日久生厌 2021-01-05 10:52

How can you do in RX a simple, stateful transform of a sequence?

Say we want to make an exponential moving average transform of a IObservable noisySequence.

3条回答
  •  小蘑菇
    小蘑菇 (楼主)
    2021-01-05 11:31

    For many of these types of calculations, Buffer is the easiest way

    var movingAverage = noisySequence.Buffer(/*last*/ 3,
        /*move forward*/ 1 /*at a time*/)
        .Select(x => (x[0] + x[1] + x[2]) / 3.0);
    

    If you need to carry state around, use the Scan operator, which is like Aggregate except that it yields values every iteration.

    Edit: fixed comment syntax

提交回复
热议问题