У меня есть поток, который я хотел бы прочитать с датчика. Поток никогда не заканчивается. В большинстве случаев значения повторяются со временем. Поэтому я хотел бы идентифицировать прогоны значений и просто сохранить первый и последний из каждого прогона и сохранить их временные метки.Используйте ruby для сжатия потока данных временных рядов
Ниже приведен пример 10 минут данных:
[[ '8:00', 4], [ '8:01', 4], [ '8:02', 4], [ '8:03', 7], ['8:04', 7], ['8:05', 8], ['8:06', 9], ['8:07', 13], [ '8:08', 13], ['8:09', 13]]. Lazy
Я хочу сжать эти данные к этому: [['8:00', 4], ['8: 02 ', 4], [' 8:03 ', 7], [' 8:04 ', 7], [' 8:05 ', 8], [' 8:06 ', 9], [' 8: 07 ', 13], [' 8:09 ', 13]]
Я пытался выполнить это через перечислимые функции, такие как chunk, each_cons, each_with_object. Однако эта проблема кажется функционально функциональной. Могу ли я выполнить это, используя ленивый перечислитель в рубине?
Ваше решение работает так, как вы описываете, и делает это элегантно. Он захватывает первый образец каждого прогона одинаковых значений, но не фиксирует окончательный образец пробега. Однако мне нужна эта окончательная выборка. В моем примере образцы поступают с регулярным интервалом - один раз в минуту, но на самом деле я никогда не смогу наслаждаться такой предсказуемостью из-за проблем с передачей данных и проблем с сенсором. Будут пробелы. Поэтому было бы невозможно вычислить окончательное время, в течение которого измерялся последний образец пробега. – mojo2go
Да, подумал, что может быть так. Рад, что ты нашел способ! –