Rellenar huecos en una serie temporal dispersa

Gana FxDart

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

Apple M1 Max, 32 GB de RAM · Dart 3.12.2 (compilado AOT) · 2026-08-24

N = 100

Tiempo Empate

Dart nativo 31 µs
FxDart 29 µs

Memoria pico Empate

Dart nativo 16.5 MB
FxDart 16.5 MB

N = 10,000

Tiempo Empate

Dart nativo 565 µs
FxDart 471 µs

Memoria pico Gana FxDart

Dart nativo 23.0 MB
FxDart 20.2 MB

N = 1,000,000

Tiempo Gana FxDart

Dart nativo 57.3 ms
FxDart 51.2 ms

Memoria pico Gana nativo

Dart nativo 125.0 MB
FxDart 144.6 MB

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í.