【发布时间】:2018-02-23 04:33:38
【问题描述】:
我正在尝试使用反应式运算符来查找可观察对象发出的值的单个总和。最终目标是发出单独的总和。序列看起来像这样。我想要添加的那些作为连续组(长度不同)出现,在我想要丢弃的值之间具有不同的频率。我要添加的字段有一个 bool 类型且值为 true 的字段。
-(F,2)-(T,4)-(T,2)-(T,7)-(F,8)-(F,9)-(F,1)-(T,2)-(T,1)-(F,1)-
到目前为止我尝试了什么:
myObservable.
.Where(x => x.IsItUseful == true)
.Aggregate(0.0, (sum,currentItem) => sum + currentItem.Value)
.Subscribe("NotYet")
这个返回所有被标记为真的元素的总和。
myObservable
.SkipWhile(x => x.IsItUseful == false)
.TakeWhile(x => x.IsItUseful == true)
.Aggregate(0.0, (sum, currentItem) => sum + currentItem.Item3)
.Subscribe("NotYetAgain");
这个只给出第一组的总和。
现在我正在尝试这些方法。
myObservable
.Buffer(myObservable.DistinctUntilChanged(x => x.IsItUseful => true)
.Subscribe("NotSure")
我对 BufferBoundary 和 BufferClosingSelector 仍然很模糊。我认为一旦我处理了一组有效值,就会打开一个新缓冲区。并且这个新缓冲区将具有从该点到另一个有效组结束的值。这意味着在第二组之前我也会选择一些无效的值。我无法在 Buffer 上找到一些使用打开和关闭选项的示例。不确定这是否也是正确的方法。
最后一个选项是我在 Buffer 上编写一个扩展方法并将我的自定义逻辑放在那里。但如果有一个开箱即用的解决方案,我会更喜欢。
【问题讨论】:
-
鉴于您上面提到的输入序列(我假设 T-7 是一个错字),您希望看到什么输出?你想要一个正在运行的输出还是序列完成后的一个输出?
标签: reactive-programming system.reactive