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;
}
```

First, you're neglecting the loop. Second, the returned value is the first element of the array. It should be as follows:

```d
auto drop2(T)(ref T[] arr, T which)
{
  //auto f = arr.find(which);
  auto f = arr.find!(a => a == which);

  //debug if(f.empty) throw ...;
  auto result = f.front; // arr.front;

  //arr = arr.remove(&f[0] - &arr[0]);
  arr = remove!(a => a == which)(arr);

  return result;
}
```
We do not know the wishes of the programmer who made the development. But it is certain that he scanned until the end of the array. So it doesn't make sense for the resulting output to be equal to the ```which```. In summary, one line is enough:

```d
return remove!(a => a == which)(arr);
```
SDB@

Reply via email to