.net - 将 Observable<Timestamp<T>> 转换为 Observable<Time Interval<T>>

标签 .net system.reactive

如何转换 Timestamped<T> 的可观察序列到 TimeInterval<T> 的序列其中间隔是原始序列上时间戳之间的时间?

给定输入序列..

new Timestamped<int>(1, DateTime.Parse("2000-01-01 00:00:01"))
new Timestamped<int>(2, DateTime.Parse("2000-01-01 00:00:05"))
new Timestamped<int>(3, DateTime.Parse("2000-01-01 00:01:04"))

.. 输出将是:
new TimeInterval<int>(1, TimeSpan.Parse("00:00:00"))
new TimeInterval<int>(2, TimeSpan.Parse("00:00:04"))
new TimeInterval<int>(3, TimeSpan.Parse("00:00:59"))

最佳答案

我认为这行得通。

var s = source.Publish().RefCount();
var sprev = s.Take(1).Concat(s);
var scurrent = s;

var converted = Observable.Zip(sprev, scurrent, (prev, current) =>
   new TimeInterval<int>(current.Value, current.Timestamp - prev.Timestamp));

我唯一不确定的是是否 Zip当任一序列结束时结束。我认为它确实如此,但我还没有测试过。

关于.net - 将 Observable<Timestamp<T>> 转换为 Observable<Time Interval<T>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16464426/

相关文章:

C# 5.0 async/await 功能和 Rx - Reactive Extensions

c# - "Merging"一个stream流,产生一个stream,每个stream的最新值

.net - .Net 3.5 中的 Rx 不是异步的?

c# - 如何使用 Entity Framework 在动态构建的查询中按实体键获取行索引

c# - Linq to SQL 中的鉴别器问题

c++ - PDB对应一个二进制

c# - source.StartWith(x).Replay(1) 和 source.Publish(x) 有什么区别

.net 收藏 : how to copy objects from one collection to another?

c# - 是否可以使用 .net 检测来自 Windows 桌面应用程序的音频?

c# - 如何去抖直到值改变(有超时)?