Ich brauche eine Liste von Filtern auf einem Stream zu konfigurieren.Anpassbare Filterung auf einem Strom
Der Strom zunächst hat keine Filter, aber es hat eine Liste der aktiven Filter während der Zeit.
wird jeder Filter eine strenge Gültigkeit haben.
Ein Testfall folgt:
var scheduler = new TestScheduler();
var input = scheduler.CreateColdObservable<char>(
ReactiveTest.OnNext(0100.Ms(), '1'),
ReactiveTest.OnNext(0200.Ms(), 'A'),
ReactiveTest.OnNext(0300.Ms(), '2'),
ReactiveTest.OnNext(0400.Ms(), 'B'),
ReactiveTest.OnNext(0500.Ms(), 'A'),
ReactiveTest.OnNext(0600.Ms(), 'B'),
ReactiveTest.OnNext(0700.Ms(), '5'),
ReactiveTest.OnNext(0800.Ms(), 'A'),
ReactiveTest.OnNext(0900.Ms(), 'C'));
// filters
// A between 70ms -> 550ms
// B between 330ms -> 400ms
// modeled as a string observable where:
// first word is the char to filter
// second word are the msecs duration of the filter
var filters = scheduler.CreateColdObservable<string>(
ReactiveTest.OnNext(0070.Ms(), "A 480"),
ReactiveTest.OnNext(0330.Ms(), "B 70")
);
var expected = scheduler.CreateColdObservable<char>(
ReactiveTest.OnNext(0100.Ms(), '1'),
ReactiveTest.OnNext(0300.Ms(), '2'),
ReactiveTest.OnNext(0600.Ms(), 'B'),
ReactiveTest.OnNext(0700.Ms(), '5'),
ReactiveTest.OnNext(0800.Ms(), 'A'),
ReactiveTest.OnNext(0900.Ms(), 'C'));
Können Sie mir vorschlagen, welche die beste Rx-Lösung ist, dies zu tun?
ps: Ich bin mit dem folgenden Erweiterungsmethode
public static class TickExtensions
{
public static long Ms(this int ms)
{
return TimeSpan.FromMilliseconds(ms).Ticks;
}
}
Der Code nicht kompiliert. Ich denke 'Ms()' sollte eine lange zurückgeben. 'filters' sieht so aus, als sollte es ein' CreateColdObservable 'sein. –
@LeeCampbell richtig, ich habe das behoben. – zpul