smallest method

List<T> smallest(
  1. Iterable<T> iterable,
  2. int k
)

Returns a list of the k smallest elements from the given iterable according to this ordering, in order from smallest to largest.

Implementation

List<T> smallest(Iterable<T> iterable, int k) {
  final heap = Heap<T>(comparator: this);
  for (final each in iterable) {
    heap.push(each);
    if (heap.length > k) {
      heap.pop(); // drop the largest element
    }
  }
  final result = List.generate(
      math.min(k, heap.length), (index) => heap.pop(),
      growable: false);
  result.reverseRange(0, result.length);
  return result;
}