Removing elements from dynamic arrays?
Salih Dincer
salihdb at hotmail.com
Tue Apr 5 03:20:14 UTC 2022
On Monday, 4 April 2022 at 23:15:30 UTC, Enjoys Math wrote:
>
> ```d
> // remove an item from an array
> template drop(T)
> {
> T drop( inout T[] arr, T which )
> {
> int i;
> T result;
>
> for (i=0; i < arr.length; i++)
> {
> if (arr[i] == which)
> {
> result = arr[i];
> break;
> }
> }
>
> debug if ( which >= arr.length)
> throw new Exception(str.format("Attempt to drop the %s
> of value %s from an array, but it was not found.", typeid(T),
> which));
> }
>
> for (; i < arr.length; i++)
> {
> arr[i] = arr[i + 1];
> }
> arr.length = arr.length - 1;
>
> return result;
> }
> }
> ```
I'm guessing you're doing this to learn and measure. You might be
better off using the slicing method though. It's also possible to
do it with a single loop:
```d
auto dropSlice(T)(T[] array, T which)
{
T[] result;
size_t i; // old index
foreach(index, element; array)
{
if(element == which) {
result ~= array[i..index]; // slice off
i = index + 1;
}
}
return result ~ array[i..$]; // last slice
}
void main()
{
char[] dizi = "abcdefdg".dup;
dizi.dropSlice('d').writeln;
```
SDB at 79
More information about the Digitalmars-d-learn
mailing list