averageBy method

  1. @useResult
double? averageBy(
  1. num selector(
    1. T element
    )
)

Mean of selector applied to each element, or null if the iterable is empty.

Returns null rather than throwing or yielding NaN on an empty iterable, so the empty case is explicit at the call site (division by zero would otherwise silently produce NaN).

Example:

[1, 2, 4].averageBy((n) => n); // 2.3333...
<int>[].averageBy((n) => n);   // null

Audited: 2026-06-12 11:26 EDT

Implementation

@useResult
double? averageBy(num Function(T element) selector) {
  num total = 0;
  int count = 0;
  for (final T element in this) {
    total += selector(element);
    count++;
  }
  if (count == 0) {
    return null;
  }
  return total / count;
}