如何创建仅在输入停止一段时间后输出的信号或流?

时间:2016-03-07 07:54:47

标签: functional-programming reactive-programming reactive-cocoa

如何创建仅在输入停止一段时间后输出的信号或流?

我想要实现的目标如下:

S1 : S - - S S S S - - - - - S S S S - - - -
S2 : - - - - - - - - - S - - - - - - - - S -

我想将S1转换为S2,如果事件已停止为3,则仅输出最后一个事件 - (其中 - 是x秒)。

3 个答案:

答案 0 :(得分:1)

使用throttle:方法,在发送下一个信号之前等待x秒,然后再发送信号。

答案 1 :(得分:0)

这是C#代码,但您应该能够翻译:

string xs = "S--SSSS-----SSSS----";
IObservable<char> source =
    Observable
        .Interval(TimeSpan.FromSeconds(1.0))
        .Zip(xs.ToCharArray(), (n, c) => c)
        .Where(c => c == 'S');

IObservable<char> query =
    source
        .Select(x =>
            Observable
                .Timer(TimeSpan.FromSeconds(3.0))
                .Select(y => x))
        .Switch();

这会在正确的时间产生两个值。

答案 2 :(得分:0)

确定。谷歌搜索后,我发现了我想要的东西。 http://reactivex.io/documentation/operators/debounce.html