给定可观察到的布尔值,得出可观察的,在一秒钟后恢复为假

时间:2014-02-04 14:25:31

标签: .net linq system.reactive observable

我有一个可观察到的布尔IObservable<bool>。我想得到一个类似于旧的观察者的新观察者,但在每个真值之后插入一秒钟的额外虚假。

例如,如果原件是

time  value
   0  false
   2  true
   5  true
   8  false

新的观察者将是

time  value
   0  false
   2  true
   3  false
   5  true
   6  false
   8  false

你能帮忙吗?


编辑:以下是测试解决方案的示例

Observable.Interval(TimeSpan.FromSeconds(1))
  .Where(x => x % 2 == 0)
  .Select(x => x % 3 != 0) 

2 个答案:

答案 0 :(得分:2)

这样的东西?

someBoolObservable.SelectMany(x =>
    Observable.Merge(
        Observable.Return(x), 
        x ? Observable.Timer(TimeSpan.FromSeconds(1)).Select(_ => false) : Observable.Empty<bool>()));

答案 1 :(得分:1)

static void Main(string[] args)
{
    var booleanOb = Observable.Interval(TimeSpan.FromSeconds(1)).Where(x => x % 2 == 0).Select(x => x % 3 != 0).Take(4);
    var onlyFalseAfterTrue = booleanOb.Delay(TimeSpan.FromSeconds(1)).Where(x => x).Select(x => false);

    var merged = booleanOb.Merge(onlyFalseAfterTrue);

    using (merged.Timestamp().Subscribe(x => Console.WriteLine("{0}:{1}", x.Timestamp, x.Value)))
    {
        merged.Wait();
    }
}