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@