I __believe__ that insertInPlace doesn't shift the elements, but use an appender allocating another array instead.
Maybe this function do what you want.


    int[] arr = [0,1,2,3,4,5,6,7,8,9];
    
    void maybe(T)(T[] arr, size_t pos, T value) {
        size_t i;
        for (i = arr.length - 1; i > pos; i--) {
            arr[i] = arr[i-1];
        }
        arr[i] = value;
    }
    
    maybe(arr, 3, 0);
    maybe(arr, 0, 1);
    assert(arr == [1, 0, 1, 2, 0, 3, 4, 5, 6, 7]);



2012/2/9 MattCodr <matheus_nab@hotmail.com>
I have a doubt about the best way to insert and move (not replace) some data on an array.

For example,

In some cases if I want to do action above, I do a loop moving the data until the point that I want and finally I insert the new data there.


In D I did this:

begin code
.
.
.
  int[] arr = [0,1,2,3,4,5,6,7,8,9];

  arr.insertInPlace(position, newValue);
  arr.popBack();
.
.
.
end code


After the insertInPlace my array changed it's length to 11, so I use arr.popBack(); to keep the array length = 10;

The code above is working well, I just want know if is there a better way?

Thanks,

Matheus.