Kagamin , dans le message (digitalmars.D.learn:30362), a écrit : > Steven Schveighoffer Wrote: > >> ahem, using dcollections: >> >> foreach(ref doRemove, cell; &organism.purge) >> doRemove = cell.x == x && cell.y == y; >> >> complexity: O(n) > > may be a generic iteration handler would be more useful? > > foreach(ref handler, cell; &organism.each) > if(cell.x == x && cell.y == y) handler.removeCurrent(); > > it could provide a whole api, say, you may want to have lookahead > > foreach(ref handler, cell; &organism.each) > if(cell.x == x && cell.y == y && handler.next.x==0) > handler.removeCurrent();
That's not easier than using Tobias' improved foreach: foreach(cell, cellRange; organism[]) if (cell.x == x && cell.y == y) organism.remove(cellRange); If you want to use algorithm specialized and optimized for the container, I would prefer to use purge than each + handler. purge seems better to me, because it can be specialized for the container and for the action, and do not require to learn a new handler structure. "each" do not seem to add a lot to foreach(cell, cellRange; range), since it must be able to cope with any operation provided by handler, and any operation combinaisons...