假设你有一个IObservable<uint>
类型的可观测震源.我在找一个变换函数
IObservable<uint> Countdown(IObservable<uint> source)
{
// how? Something like ...
return source.Select(value => ProduceInnerObservable(value)).Switch()
}
它将source
转换为以下形式:
- 当
source
产生一个值时,产生的可观测对象应该立即发布相同的值 - 假设最后发布的元素是
N
.如果source
中没有任何新元素,则Result Observable应该在N
个刻度之后发布值N-1
;然后在N-1
个刻度之后发布值N-2
;依此类推,直到发布0 - 当
source
发布新值时,这种类似计时器的行为将根据新值进行重置
示例输入/输出:
Tick time | Source observable | Result observable |
---|---|---|
0 | 10 | 10 |
10 | 9 | |
19 | 8 | |
21 | 2 | 2 |
23 | 1 | |
24 | 0 | |
100 | 1 | 1 |
101 | 0 | |
... | ... | ... |
实现这一点最优雅的方式是什么?