В последовательности 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();
Выходные данные показывают в два раза больше строк отладки, чем элементов в последовательности.
Я понимаю, почему это происходит, но до сих пор я не нашел альтернативы, которая бы не оценивала последовательность дважды. Как я могу объединить предыдущий и текущий только с одной оценкой последовательности?