Как удалить элемент из массива в D

Объединить элемент x в массив items в D легко, это s, как если бы это был список массивов:

arr ~= x;

, но как мне удалить элемент с индексом i из элементов ?

(Предупреждение: если Я удаляю элемент, а затем добавляю новый элемент, массив не должен перераспределяться . Таким образом, простой фрагмент не будет работать.)


Обновление:

На основе ответа CyberShadow об использовании ] acceptSafeAppend , я написал этот код:

static void removeAt(T)(ref T[] arr, size_t index)
{
    foreach (i, ref item; arr[index .. $ - 1])
        item = arr[i + 1];
    arr = arr[0 .. $ - 1];
    arr.assumeSafeAppend();
}

Однако проблема возникает, когда у вас есть что-то вроде:

auto superArr = [0, 1, 2, 3, 4]; //Must not be modified
auto arr = superArr[0 .. $ - 1];
writeln(superArr);
arr.removeAt(0);    //Should copy the slice and modify the copy
writeln(superArr);  //but obviously doesn't

Базовый массив среза должен не изменяться, если элемент удаляется из кусочек; вместо этого фрагмент необходимо скопировать.

Но я не могу узнать, является ли массив фрагментом большего массива ... так что это не сработает.

Есть предложения?

12
задан Mehrdad 16 May 2011 в 18:46
поделиться