【问题标题】:Rx Dynamically Sized Sliding BufferRx 动态大小的滑动缓冲区
【发布时间】:2016-06-24 13:45:51
【问题描述】:

我不完全确定如何表达这一点,所以如果我弄错了,我很抱歉。 我有一系列事件,我们会说如下:

0,1,2,3,4,5,6,7,8,9,...

我想为我的程序提供一个 IObservable,它返回如下所示的缓冲区:

[0],[0,1],[0,1,2],[0,1,2,3],[1,2,3,4],[2,3,4,5] ,[3,4,5,6],....

或者其他一些不是 4 的最大缓冲区大小。如果我可以像使用定时缓冲区调用那样输入缓冲区参数,那会很容易,但不会出现重载,所以我尝试构建序列手动:

target.LogEvents.Buffer(1,1).Take(1).Concat(target.LogEvents.Buffer(2,1).Take(1)).Concat(target.LogEvents.Buffer(3,1).Take(1)).Concat(target.LogEvents.Buffer(4, 1)).Subscribe(...);

但这没有用。它给了我

[0],[1,2],[3,4,5],[6,7,8,9],[7,8,9,10],....

如何生成我的序列?

【问题讨论】:

  • 我想你会发现这个昨天的问题(如果不完全,那么以某种方式)很有用!
  • @TalhaIrfan 不是真的。这向您展示了如何生成给定大小的数组的排列,这不是我要问的。

标签: c# .net system.reactive


【解决方案1】:

这对你有用吗?

IObservable<IEnumerable<int>> query = 
    source
        .Scan(Enumerable.Empty<int>(), (a, x) =>
            a.Concat(new [] { x }).TakeLast(4).ToList());

您需要同时 NuGet "Rx-Main" 和 "Ix-Main" 才能工作。

【讨论】:

  • 谢谢!这很奇怪。之前没怎么用过Scan。 Ix-Main 非常好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多