Categoría con el gasto medio más alto

Gana FxDart

Requisito

Dado un mes de gastos —cada uno con fecha, categoría e importe—, encuentra la categoría con el importe medio por transacción más alto e imprímela con la media formateada a dos decimales. Los datos están en el código de abajo; ambas versiones deben imprimir la línea que aparece bajo Salida esperada.

Salida esperada
Highest average spend: Travel ($111.00 per transaction)

Lado a lado

Dart nativo

FxDart

Por qué difieren

El núcleo de Dart no tiene ni groupBy ni maxBy; package:collection aporta ambos — pero como funciones de nivel superior, no como pasos de una cadena. La versión nativa se lee por tanto de dentro afuera: maxBy(… envolviendo un map sobre las entradas de un groupBy(… — tres modismos (llamada a función, cadena de métodos, llamada a función) para una sola idea de tres pasos. FxDart mantiene el orden de lectura igual al del flujo de datos: groupBy sobre las transacciones, map de cada grupo a (category, average), maxBy sobre la media. El mismo algoritmo, pero la frase se lee de izquierda a derecha.

Benchmark

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

N = 100

Tiempo Empate

Dart nativo 8.4 µs
FxDart 7.9 µs

Memoria pico Empate

Dart nativo 16.5 MB
FxDart 16.6 MB

N = 10,000

Tiempo Empate

Dart nativo 365 µs
FxDart 355 µs

Memoria pico Empate

Dart nativo 22.9 MB
FxDart 22.9 MB

N = 1,000,000

Tiempo Gana nativo

Dart nativo 60.5 ms
FxDart 64.6 ms

Memoria pico Empate

Dart nativo 136.9 MB
FxDart 136.1 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í.