缓冲后重置不同

Reset Distinct after Buffer

所以我有这样的字符串流:

ABA        ABCA
+--------+-------+ 
0        1       2 s

我想获取不同的值,将它们缓冲一秒钟,然后重新执行此操作。所以我想根据上图得到 2 组数据:

AB 和 ABC

我是从这个开始的:

void Main()
{
    var subject = new Subject<string>();

    var subscription = subject 
    .Distinct()
    .Buffer(TimeSpan.FromSeconds(1))
    .Subscribe(eg => 
        {
            eg.Dump();
        }
    );

    subject.OnNext("A");
    subject.OnNext("B");
    subject.OnNext("A");

    Console.ReadLine();

    subject.OnNext("A");
    subject.OnNext("B");
    subject.OnNext("C");
    subject.OnNext("A");

    Console.ReadLine();

    subscription.Dispose();
}

但是这会在我输入第一个行之前输出 AB Console.ReadLine(),然后输出 C。

我想要的是在每个缓冲期后重置 Distinct() 运算符。这可能吗?

我当然可以做到这一点并使其正常工作:

var subscription = subject 
   .Buffer(TimeSpan.FromSeconds(2))
   .Select(s => s.Distinct())
   .Subscribe(eg => 
    {
        eg.Dump();
    });

但我想知道是否可以使用 Rx 运算符来完成。

您最后的解决方案应该可以正常工作。如果你想使用 IObservable 留在 Rx 领域,你应该切换到 Window 运算符:

var subscription = subject
    .Window(TimeSpan.FromSeconds(1))
    .Select(o => o.Distinct())
    .Merge()
    .Subscribe(eg =>
        {
            eg.Dump();
        });