В последовательности IObservable
(в Reactive Extensions для .NET) я хотел бы получить значение предыдущего и текущего элементов, чтобы я мог их сравнить. Я нашел пример онлайн, подобный ниже, который выполняет задачу:
sequence.Zip(sequence.Skip(1), (prev, cur) => new { Previous = prev, Current = cur })
Он отлично работает, за исключением того, что он дважды оценивает последовательность, чего я бы хотел избежать. Вы можете видеть, что он дважды оценивается с помощью этого кода:
var debugSequence = sequence.Do(item => Debug.WriteLine("Retrieved an element from sequence"));
debugSequence.Zip(debugSequence.Skip(1), (prev, cur) => new { Previous = prev, Current = cur }).Subscribe();
Вывод показывает в два раза больше строк отладки, так как в последовательности есть элементы.
Я понимаю, почему это происходит, но до сих пор я не нашел альтернативы, которая не оценивает последовательность дважды. Как я могу объединить предыдущие и текущие только с одной оценкой последовательности?