quantileIndex function Summarizing data
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;
}