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