std.algorithm.remove from array of custom classes?

BBaz via Digitalmars-d-learn digitalmars-d-learn at
Wed Dec 9 05:13:36 PST 2015

On Wednesday, 9 December 2015 at 13:05:31 UTC, Tim K. wrote:
> Hi!
> I'm trying to remove an item from an array of objects. But I 
> get error messages when compiling (see below) which I do not 
> understand. I figured I had to override opEquals for it to 
> work, but no.
> How do I get this to work?

You should read the documentation, there is two errors:

1) remove works with an index
2) remove does not remove in place

so with

import std.stdio;
import std.algorithm;

class A
     this(string si, uint ui) { s = si; u = ui; }
     string s;
     uint u;

     override bool opEquals(Object obj) const
         if (A o = cast(A)obj)
             return (s == o.s) && (u == o.u);
             return false;

void main(string[] argv)
     A a = new A("a", 1);
     A b = new A("b", 2);
     A[] as = [a, b];
     as = as.remove(0);

also, off topic but 2 other advices/errors

3) opEquals can be 'const' because the method doesn't mutate the 
state of the object
4) your cast wasn't safe

More information about the Digitalmars-d-learn mailing list