Andrea Fontana:

I wonder if exists a way to get top n distinct elements from a range (infinite too!)

A (not efficient) way to to this is range.array.sort.uniq.take(n) but it's a bit overkill, it sorts elements, and of course doesn't work with infinite ranges. Am i missing any function?

What does it mean "top"?

I think you are not missing functions.

One solution (not tested):


bool[ForeachType!(typeof(myRange))] mySet;
foreach (item; myRange) {
    mySet[item] = true;
    if (mySet.length >= n)
        break;
}
auto top = mySet.byKey;


Bye,
bearophile

Reply via email to