minMaxOf method

({T max, T min}) minMaxOf(
  1. Iterable<T> iterable, {
  2. ({T max, T min}) orElse()?,
})

Returns a tuple with the minimum and maximum of the provided iterable.

Implementation

({T min, T max}) minMaxOf(Iterable<T> iterable,
    {({T min, T max}) Function()? orElse}) {
  final iterator = iterable.iterator;
  if (iterator.moveNext()) {
    var minValue = iterator.current;
    var maxValue = iterator.current;
    while (iterator.moveNext()) {
      minValue = min(minValue, iterator.current);
      maxValue = max(maxValue, iterator.current);
    }
    return (min: minValue, max: maxValue);
  }
  if (orElse == null) throw StateError("No element");
  return orElse();
}