Векторы и динамические массивы в D - PullRequest
7 голосов
/ 10 октября 2010

Я думал, что динамические массивы являются заменой для векторов в D, но, похоже, у них нет функции удаления (только для ассоциативных массивов), что является скорее ограничением для вектора, поэтому мне интересно, получил ли я право. Если есть массив, подобный следующему,

uint[] a;
a.length = 3;
a[0] = 1;
a[1] = 2;
a[2] = 3;

Тогда я нашел единственный способ удалить, скажем, второй элемент:

a = a[0..1] ~ a[2];

Но это кажется неправильным (но, может быть, только потому, что я еще не все это понимаю). Так есть ли вектор и есть ли другой способ удаления элемента из динамического массива?

Спасибо.

Ответы [ 2 ]

6 голосов
/ 11 октября 2010

Вы можете использовать std.algorithm.remove(), который работает не только с массивами, но и с общими диапазонами. Пример:

import std.algorithm;

void main() {
    uint[] a = [1, 2, 3];
    a = a.remove(1);
    assert(a == [1, 3]);
}
3 голосов
/ 10 октября 2010

В std.container есть шаблон Array!T, который, похоже, очень похож на std::vector из C ++.

Array!int a = [0, 1, 2, 3];
a.linearRemove(a[1..3]);
assert(equal(a, [0, 3]));

К сожалению, у него нет отдельного метода удаления, хотявсегда можно использовать linearRemove с одиночным диапазоном.

...