how to get top N distinct elements from range?

bearophile bearophileHUGS at lycos.com
Fri Mar 8 06:10:54 PST 2013


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


More information about the Digitalmars-d-learn mailing list