Rellenar huecos en una serie temporal dispersa
Requisito
Las transacciones del 1 al 14 de julio (los datos están en el código)
solo existen en algunos días. Construye la serie diaria
densa — los días sin transacciones cuentan como
0.00 — y luego imprímela como dos filas semanales, cada una
con sus 7 valores diarios y un total de la semana. Ambas versiones deben
imprimir el bloque que aparece bajo Salida esperada.
Salida esperada
Daily spend, July 1-14 (0.00 = no transactions) Jul 01-07: 16.70 0.00 30.00 0.00 0.00 8.75 0.00 | week total 55.45 Jul 08-14: 22.10 0.00 0.00 19.60 0.00 9.90 0.00 | week total 51.60
Lado a lado
Dart nativo
FxDart
Por qué difieren
Rellenar huecos significa dirigir el pipeline desde el
calendario, no desde los datos: range(1, 15)
genera todos los días, groupBy responde a «qué pasó ese
día», y sumBy sobre un grupo posiblemente vacío da gratis el
0.00 de los días tranquilos. La agrupación semanal es entonces
chunk(7) + zipWithIndex — remodelar la serie
densa sin un solo cálculo de índice más allá de la etiqueta de la fila.
Dart nativo obtiene la serie densa con un for contador y la
agrupación con slices/indexed de
package:collection — funciona, pero el paso de sumar un
grupo es un fold con valor inicial las dos veces, y las dos
fases no se componen en un único flujo visible.
Benchmark
N = 100
Tiempo Empate
Memoria pico Empate
N = 10,000
Tiempo Empate
Memoria pico Gana FxDart
N = 1,000,000
Tiempo Gana FxDart
Memoria pico Gana nativo
Las barras son medianas de iteraciones cronometradas repetidas en procesos nuevos por lado (los N pequeños se agrupan por resolución del temporizador). Dos lados a menos del 5% entre sí — o a menos de 0.6 ms, una diferencia que nadie puede percibir — cuentan como empate; las carreras relativas ajustadas se vuelven a medir hasta 5 veces. En una app, cualquier cosa por debajo de unos pocos milisegundos es invisible para el usuario, gane la barra que gane. La memoria es el RSS pico del proceso. La VM de Dart y el dataset son idénticos en ambos lados, así que la diferencia entre las dos barras es lo que retiene el pipeline en sí.