quantileIndex function Summarizing data

int? quantileIndex(
  1. Iterable<num?> iterable,
  2. num p
)

Similar to quantile, but returns the index to the left of p.

Implementation

int? quantileIndex(Iterable<num?> iterable, num p) {
  if (p.isNaN) return null;
  var k = iterable.length, numbers = iterable.map(nanIfNull).toList();
  if (p <= 0) return minIndex(numbers);
  if (p >= 1) return maxIndex(numbers);
  var index = Uint32List(k), j = k - 1, i = (j * p).floor();
  for (var i = 0; i < k; i++) {
    index[i] = i;
  }
  quickselect<Uint32List, int>(index, i,
      left: 0,
      right: j,
      compare: (i, j) => ascendingDefined(numbers[i], numbers[j]));
  var i0 =
      greatestBy(Uint32List.sublistView(index, 0, i + 1), (i) => numbers[i]);
  return i0 != null && i0 >= 0 ? i0 : -1;
}