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);
        else
            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);
    writeln(as);
}
~~~~~~~~~~~~~~~~~~~~~~~~~~

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


http://dlang.org/phobos/std_algorithm_mutation.html#.remove

Reply via email to