gpt4 book ai didi

c# - 使用 RX 在不同时间触发事件?

转载 作者:太空狗 更新时间:2023-10-29 22:33:38 25 4
gpt4 key购买 nike

我有大量的简单对类:

public class Pair { public DateTime Timestamp; public double Value; }

它们按升序时间戳排序。我想在适当的时间为列表中的每个项目触发一个具有值(例如,Action )的事件。时间是过去的,所以我需要规范化时间戳,使列表中的第一个是“现在”。我们能否使用 Reactive Extensions 对其进行设置,使其在两个项目之间的时间差之后触发下一个事件?

最佳答案

pairs是你的序列:

var obs = pairs.OrderBy(p => p.Timestamp).ToObservable();

现在obs是作为有序可观察对象的对。

Observable.Zip(
obs,
obs.Take(1).Concat(obs),
(pair1, pair2) => Observable.Timer(pair1.Timestamp - pair2.Timestamp)
.Select(_ => pair1.Value))
.Concat()
.Subscribe(/* Do something here */);

zip 负责将绝对时间转换为偏移量。它将获取序列并将其与自身连接,但偏移一个,如下所示

Original 1--2--4--7--11
Offset 1--1--2--4--7--11
Joined 0--1--2--3--4

然后将这个新值放入 Observable.Timer 中延迟它适当的量。决赛ConcatIObservable<IObservable<double>> 的结果展平进入 IObservable<double> .这假定您的序列是有序的。

关于c# - 使用 RX 在不同时间触发事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10440451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com