2017-12-23 28 views
0

내가이 같은 일련의가 있다고 가정.반응 확장 기능을 위해 겹치는 스트림을 처리하는 방법은 무엇입니까? <code>A - B - C</code>가 순차적으로 발생하면</p> <p>1) :</p> <pre><code>X - X - A - B - C - X - X </code></pre> <p>내가이 사건에 관심이 :

2-) B - C이 순차적으로 발생하고 A - B - C이 발생하지 않는 경우.

따라서 구독하겠습니다. 예를 들어

A - B - CX - B - C이 발생하면 그때 BC 인쇄하는 반면 I은 단지 ABC 아니지만 BC를 인쇄 할 경우에 발생한다. 어떻게해야합니까?

답변

2

소스가 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)); 
+0

큰하지만이없는 상태 S0없이 할 수 = 'A'나는 이러한 쿼리는 서로 독립적으로 원하는!? –

+0

@OnurGumus - "서로 독립적"이라는 것이 무슨 뜻인지 모르겠습니다. – Enigmativity

+0

쿼리 1이 A를 사용하는지 쿼리 2가 알 수 없다고 가정합니다. 모든 문자가 될 수 있습니다. 그래서 내가 query2 쿼리 1 내부를 인식하고 않고 참조로 query1 기반으로 작성하려고합니다. 즉, 어떻게 든 쿼리 하나가 A 대신 Z를 사용하면 쿼리 2의 코드가 변경되지 않아야합니다. –