Reputation: 1439
Suppose I have a series of like this:
X - X - A - B - C - X - X
I am interested in two events:
1-) if A - B - C
occurs sequentially.
2-) if B - C
occurs sequentially AND if A - B - C
does not occur.
Accordingly I will subscribe.
For example if A - B - C
occurs I will print only ABC but not BC, whereas if X - B - C
occurs then I will print BC. How can I do this ?
Upvotes: 0
Views: 57
Reputation: 117027
If your source is IObservable<char>
then try these:
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));
Upvotes: 2