2017-03-20 1 views
0

IObservable 하위 속성이있는 IObservable 개체가있는 경우 하위 관찰 지점을 필터링하여 하위 속성이 X 번호 이상인 인스턴스 만 포함하려면 어떻게해야합니까? 항목 중.Observable에서 observable 하위 항목이 x 개 이상인 항목을 필터링하는 방법

예를 들어 다음 테스트 케이스에는 2 개의 MyClass가 포함 된 IObservable이 있습니다. 첫 번째에는 5 개의 정수와 2의 관찰 가능 항목이 포함되어 있습니다. 따라서 제 질문은 4 개 이상의 숫자가 포함 된 인스턴스 만 포함하도록 MyClass의 IObservable을 필터링하는 방법입니다.

[TestClass] 
public class TestClass 
{ 
    public class MyClass 
    { 
     public IObservable<int> Numbers { get; set; } 
    } 

    [TestMethod] 
    public void Test() 
    { 
     //Arrange  
     var data = new [] 
     { 
      new MyClass() 
      { 
       Numbers = new Observable.Range(100, 5) 
      }, 
      new MyClass() 
      { 
       Numbers = new Observable.Range(200, 2) 
      } 
     }; 

     var observableData = data.ToObservable(); 

     //Act 
     //TODO: set filtered so that it includes 
     // all instances of MyClass which have 4 
     // or more items in Numbers 
     IObservable<List<MyClass>> filtered = observableData 

     //Assert 
     IObservable<List<MyClass>> observableResult = 
      filtered.Aggregate(new List<MyClass>(), 
       (l, o) => 
        { 
         l.Add(o); 
          return l; 
        }); 

     var result = observableResult.Wait(); 
     //expected result should include data[0] because 
     // is contains 5 numbers but exclude data[1] 
     // because it only contains 2. 
     var expected = new List<MyClass>() { data[0] }; 

     CollectionAssert.AreEquivalent(expected, result); 
    } 
} 

도움을 주시면 감사하겠습니다.

답변

0

해결책 : 영어

IObservable<MyClass> filtered = observableData 
    .SelectMany(c => c.Numbers 
     .Skip(3) 
     .Take(1) 
     .Select(_ => c) 
    ); 

: MyClass의 각 인스턴스에 대해, 그리고, 제 3 개 숫자를 생략 한 소요 관찰 생산. 해당 번호를 원래 인스턴스 MyClass에 매핑합니다. 우리는 SelectMany을 사용하여 생성 된 관측 값을 하나로 평평하게 만듭니다.

+0

아, Take (1). 그게 제가 놓친 부분입니다. 그래서 일단 당신이 얼마나 알고 있는지 분명히 :) 많은 감사합니다. – 1adam12

관련 문제