http://d.puremagic.com/issues/show_bug.cgi?id=9674
--- Comment #3 from [email protected] 2013-03-09 15:39:49 PST --- I am trying your code, but I see duplications in the output: import std.stdio: writeln; import std.algorithm: map, sort; import std.array: array; import std.range: iota, isInputRange; import std.random: uniform; import std.traits: ForeachType; struct FilterResult3(alias pred, Range) { private Range _input; this(Range r) { _input = r; } private bool processed = false; void process() { if (!processed) while (!_input.empty && !pred(_input.front)) _input.popFront(); processed = true; } @property auto ref front() { process(); return _input.front; } @property bool empty() { process(); return _input.empty; } void popFront() { process(); _input.popFront(); processed = false; } } FilterResult3!(pred, Range) filter3(alias pred, Range)(Range rs) { return FilterResult3!(pred, Range)(rs); } auto distinct3(Range)(Range r) if (isInputRange!Range) { bool[ForeachType!Range] mySet; return r.filter3!((k) { if (k in mySet) return false; mySet[k] = true; return true; }); } void main() { 100.iota.map!(_ => uniform(0, 10)) .distinct3.array.sort.writeln; // } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
