On Friday, 8 March 2013 at 14:10:55 UTC, bearophile wrote:
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
Yes I wonder if a lazy function like this function was in phobos.
It's quite common, and I didn't want to reinvent wheel :)