On Tuesday, 5 April 2022 at 14:10:44 UTC, Steven Schveighoffer wrote:
I'd implement it probably like this (for D2):

```d
auto drop(T)(ref T[] arr, T which)
{
   import std.algorithm, std.range;
   auto f = arr.find(which);
   debug if(f.empty) throw ...;
   auto result = arr.front;
   arr = arr.remove(&f[0] - &arr[0]); // god I hate this
   return result;
}
```

I think you can get rid of the ugly pointer arithmetic using `countUntil`:

```d
auto drop(T)(ref T[] arr, T which)
{
    import std.algorithm, std.range, std.exception;

    auto i = arr.countUntil(which);
    debug enforce(i < arr.length, "Not found");
    auto result = arr[i];
    arr = arr.remove(i);
    return result;
}
```

Reply via email to