我认为动态数组是D中矢量的替代,但似乎它们没有删除函数(只有关联数组才有),这对于矢量来说是一个限制,所以我想知道我是否已经得到了对。如果a有一个如下的数组,
uint[] a;
a.length = 3;
a[0] = 1;
a[1] = 2;
a[2] = 3;
然后,我发现删除第二个元素的唯一方法是,
a = a[0..1] ~ a[2];
但这似乎并不正确(但也许只是因为我还不了解这一点)。那么有一个向量,还有另一种从动态数组中删除元素的方法吗?
感谢。
答案 0 :(得分:6)
您可以使用std.algorithm.remove()
,它不仅适用于数组,还适用于通用范围。例如:
import std.algorithm;
void main() {
uint[] a = [1, 2, 3];
a = a.remove(1);
assert(a == [1, 3]);
}
答案 1 :(得分:3)
在std.container
中有一个Array!T
模板,与C ++中的std::vector
非常相似。
Array!int a = [0, 1, 2, 3];
a.linearRemove(a[1..3]);
assert(equal(a, [0, 3]));
不幸的是,它似乎没有单独的删除方法,尽管您可以始终将linearRemove
与单一范围一起使用。