【问题标题】:Combining an observable with the latest value of another observable将一个 observable 与另一个 observable 的最新值相结合
【发布时间】:2017-02-08 21:20:24
【问题描述】:

我有 2 个可观察对象 AB

我想生成仅在 A 发射时发射C,结合刚刚在A 中推送的值和B 中的最新值。 p>

【问题讨论】:

  • 我仍在寻找您所描述的是否有内置植入物。你的本质是这样描述的:rxmarbles.com/#withLatestFrom 顶线是 A 底部是 B ,对吗?
  • @eranotzap 就是这样!这就是我要找的。到目前为止,我从未使用过该运算符。谢谢!
  • @SuperJMN 我很想知道您是否在 C# 中找到或实现了它,我无法找到它。我可以自己想怎么实现..
  • 有一个方法叫Observable.WithLatestFrom。你在哪里看的?
  • @Shlomo 我什至不知道这种方法存在!

标签: c# .net system.reactive observable


【解决方案1】:

给你,我想这样就可以了

假设 A 是 char 的 observable,B 是 int 的 Observable。

每 3 秒调用一次 next。 B 每 1 秒调用一次 next。

从 A 中获取下一个与当前最新的 B。

    static void Main(string[] args)
    {            
        var chrObservable = CharEnumerable().ToObservable();
        var timer1 = Observable.Interval(TimeSpan.FromSeconds(3));

        var chrAtInterval = timer1.Zip(chrObservable, (ts,c) => c);

        var numberObservable = NumEnumerable().ToObservable();
        var timer2 = Observable.Interval(TimeSpan.FromSeconds(1));

        var numberAtInterval = timer2.Zip(numberObservable, (ts,n) => n);

        chrAtInterval.WithLatestFrom(numberAtInterval,(c, n) => new{c,n})
               .Subscribe(pair => Console.WriteLine(pair.c + ":" + pair.n));

        Console.WriteLine("Waiting...");
        Console.ReadKey();
    }

    private static IEnumerable<int> NumEnumerable()
    {
        for (int i = 0; i < 10; i++)
        {
            yield return i;
        }
    }

    private static IEnumerable<char> CharEnumerable()
    {
        for (int i = 0; i < 10; i++)
        {
            yield return (char)(i + 65);
        }
    }

【讨论】:

  • 是的,就是这样!我已经在类似的场景中实现了。您的示例完美地说明了用法。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-07
相关资源
最近更新 更多