假设我有一系列这样的:
X - X - A - B - C - X - X
我对两个事件感兴趣:
1-)如果A - B - C
依次发生。
2-)如果B - C
依次发生并且不发生A - B - C
。
因此,我将订阅。
例如,如果发生A - B - C
,我将仅打印 abc ,而不是 bc ,而如果发生X - B - C
,则我将打印 bc 。我该怎么做?
如果您的源为IObservable<char>
,请尝试以下:
IObservable<string> query1 =
source
.Publish(ss =>
ss
.Zip(ss.Skip(1), (s0, s1) => new { s0, s1 })
.Zip(ss.Skip(2), (s01, s2) => new { s01.s0, s01.s1, s2 }))
.Where(s => s.s0 == 'A' && s.s1 == 'B' & s.s2 == 'C')
.Select(s => String.Join("", s.s0, s.s1, s.s2));
IObservable<string> query2 =
source
.Publish(ss =>
ss
.Zip(ss.Skip(1), (s0, s1) => new { s0, s1 })
.Zip(ss.Skip(2), (s01, s2) => new { s01.s0, s01.s1, s2 }))
.Where(s => s.s0 != 'A' && s.s1 == 'B' & s.s2 == 'C')
.Select(s => String.Join("", s.s1, s.s2));