我想创建一个“单侧去抖动”,其中F事件仅在n的时间跨度没有T事件时传递。关于如何解决这个问题的任何想法?
大理石图:
In: (T) (F)(T) (F) (T) (F)(T)(F)
| |..... |..... | |.....|.....
| X | | X |
Out: (T) (F) (T) (F)
答案 0 :(得分:2)
我认为这主要是有用的(假设你想保持TFTF
次序)。我看不出.Sample
有何帮助。这与您的解决方案非常相似:
var result = source.Publish(_source =>
Observable.Merge(
_source.Where(b => b), //unthrottled trues
_source.Throttle(ts).Where(b => !b) //throttled falses
)
)
.DistinctUntilChanged(); //To maintain TFTF order
建议使用.Publish
,因为您有多个source
订阅。
答案 1 :(得分:0)
我在此期间提出的是:
Marple图:
In: (T) (F)(T) (F) (T) (F)(T)(F)
ThrottleF: |...... |...... |.....|......
(F) (F) (F)
Sample: (T) (F) (F)
MergeWithT: (T) (T)(T) (F)(T) (T) (F)
DistinctUC: (T) (F)(T) (F)
C#代码:
var result = source
.Sample(source
.Where(v => !v)
.Throttle(n))
.Merge(source
.Where(v => v))
.DistinctUntilChanged();
修改强> @Shlomo提供了一个改进版本,现在标记为解决方案。