Ryan Rolnicki
11/28/2021, 5:50 PMfun <T, R : Comparable<R>> Iterable<T>.minBy(n: Int, selector: (T) -> R): List<T> {
val buffer = sortedSetOf<Pair<R, T>>(compareBy { it.first })
for (el in this) {
buffer += selector(el) to el
if (buffer.size > n) {
buffer.remove(buffer.last())
}
}
return buffer.map { it.second }
}