Я просто наткнулся на ситуацию, когда я не могу избежать сохранения состояния, но у меня все еще есть ощущение, что этого можно достичь, используя только Rx:
У меня есть две наблюдаемые, основная из которых вызывает onNext каждый раз, когда пользователь вводит значение:
-- RV -- RV -- RV -- IV ------ ... ->
Другой вызывает onNext каждый раз, когда пользователь хочет удалить последнее значение
------------------------- X -- ... ->
Теперь дело в том, что меня беспокоит только когда пользователь удаляет релевантное значение, поэтому в этом случае я хотел следующую последовательность:
-- RV -- RV -- RV ------------ ... ->
На данный момент я могу получить то, что хочу, просто используя оператор WithLatestFrom, однако в следующем случае:
-- RV1 -- RV2 -- RV3 -- IV --------- RV4 ----- ... ->
--------------------------- X -- X ------ X -- ... ->
Я не знаю, как я могу создать наблюдаемую, которая возвращает мне следующий поток:
------------------------------- RV3 ---- RV4 -- ... ->
Надпись:
RV = Соответствующее значение
IV = Не имеет значения
var scheduler = new TestScheduler();
var values =
scheduler
.CreateColdObservable<int>(
new Recorded<Notification<int>>(2, Notification.CreateOnNext(0)),
new Recorded<Notification<int>>(4, Notification.CreateOnNext(1)),
new Recorded<Notification<int>>(6, Notification.CreateOnNext(2)),
new Recorded<Notification<int>>(10, Notification.CreateOnNext(3)),
new Recorded<Notification<int>>(12, Notification.CreateOnNext(4)));
var removes =
scheduler
.CreateColdObservable<Unit>(
new Recorded<Notification<Unit>>(7, Notification.CreateOnNext(Unit.Default),
new Recorded<Notification<Unit>>(8, Notification.CreateOnNext(Unit.Default)));
values
.Select(x => x.ToString())
.Merge(removes.Select(x => "X"))
.Subscribe(x => Console.WriteLine(x));
scheduler.Start();