gpt4 book ai didi

c# - 缓冲后重置不同

转载 作者:行者123 更新时间:2023-11-30 23:18:23 24 4
gpt4 key购买 nike

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

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

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

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();
}

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

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

当然我可以做到这一点并让它工作:

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

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

最佳答案

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

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

关于c# - 缓冲后重置不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40950382/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com