Valor medio de los pedidos de más de $100

Empate

Requisito

De un lote de pedidos de una tienda, quédate solo con los que suman más de $100 e imprime su valor medio como importe monetario. Los datos están en el código de abajo; ambas versiones deben imprimir la línea que aparece bajo Salida esperada.

Salida esperada
Average large-order value: $203.81

Lado a lado

Dart nativo

FxDart

Por qué difieren

Siendo sinceros: no mucho —es un empate. Dart nativo necesitaría un fold con contador (o una suma dividida por una longitud, recorriendo los datos dos veces), pero el .average de package:collection cierra esa brecha y deja where → map → average frente a filter → averageBy. FxDart se ahorra el map intermedio al aceptar directamente la función de clave, y averageBy es una palabra en vez de una propiedad de extensión sobre un iterable proyectado —vocabulario, no victoria. Ambas se leen bien.

Benchmark

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

N = 100

Tiempo Empate

Dart nativo 2.0 µs
FxDart 787 ns

Memoria pico Empate

Dart nativo 16.5 MB
FxDart 16.4 MB

N = 10,000

Tiempo Empate

Dart nativo 185 µs
FxDart 83 µs

Memoria pico Gana FxDart

Dart nativo 19.1 MB
FxDart 15.4 MB

N = 1,000,000

Tiempo Gana FxDart

Dart nativo 17.3 ms
FxDart 8.79 ms

Memoria pico Empate

Dart nativo 75.2 MB
FxDart 72.9 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í.