将一个可观察值与另一个可观察值的最新值相结合
Combining an observable with the latest value of another observable
我有 2 个可观察对象 A
和 B
。
我想生成 C
,它 仅在 A 发出 时发出,结合刚刚推入 A
的值,以及最B
.
中的最新值
给你,我想这样就可以了
假设 A 是 char 的可观察对象,B 是 int 的可观察对象。
A 每 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);
}
}
我有 2 个可观察对象 A
和 B
。
我想生成 C
,它 仅在 A 发出 时发出,结合刚刚推入 A
的值,以及最B
.
给你,我想这样就可以了
假设 A 是 char 的可观察对象,B 是 int 的可观察对象。
A 每 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);
}
}