std.algorithm.remove() 复制数组项?
std.algorithm.remove() duplicating array items?
我有一个数组,需要按索引从中删除项目。由于某种原因,它会复制数组中的其他项目以取代已删除项目的位置。这是问题的示例。
import std.stdio: writeln;
import std.algorithm: remove;
void main() {
string[string] assocArray = [
"firstvalue": "Number 1",
"secondvalue": "Number 2",
"thirdvalue": "Number 3",
"fourthvalue": "Number 4",
"fifthvalue": "Number 5",
"sixthvalue": "Number 6",
];
string[] assocArrayKeys = assocArray.keys(); // I know these aren't in the same order as the literal.
writeln(assocArrayKeys);
// ["thirdvalue", "fourthvalue", "fifthvalue", "sixthvalue", "firstvalue", "secondvalue"]
assocArrayKeys.remove(0);
assocArrayKeys.remove(5);
writeln(assocArrayKeys);
// ["fourthvalue", "fifthvalue", "sixthvalue", "firstvalue", "secondvalue", "secondvalue"]
// It did remove them, but there are now two "secondvalue"s.
}
如有任何帮助,我们将不胜感激。
这是一个有点愚蠢的问题。有人指出,在文档中,它说它必须重新分配给自己。
Note that remove does not change the length of the original range directly; instead, it returns the shortened range. If its return value is not assigned to the original range, the original range will retain its original length, though its contents will have changed.
来源:https://dlang.org/library/std/algorithm/mutation/remove.html
解决方法如下:
assocArraykeys = assocArrayKeys.remove(0);
assocArrayKeys = assocArrayKeys.remove(5);
这对我来说似乎有点愚蠢和不直观,因为它在 std.algorithm.mutation
中。关键字:突变.
我有一个数组,需要按索引从中删除项目。由于某种原因,它会复制数组中的其他项目以取代已删除项目的位置。这是问题的示例。
import std.stdio: writeln;
import std.algorithm: remove;
void main() {
string[string] assocArray = [
"firstvalue": "Number 1",
"secondvalue": "Number 2",
"thirdvalue": "Number 3",
"fourthvalue": "Number 4",
"fifthvalue": "Number 5",
"sixthvalue": "Number 6",
];
string[] assocArrayKeys = assocArray.keys(); // I know these aren't in the same order as the literal.
writeln(assocArrayKeys);
// ["thirdvalue", "fourthvalue", "fifthvalue", "sixthvalue", "firstvalue", "secondvalue"]
assocArrayKeys.remove(0);
assocArrayKeys.remove(5);
writeln(assocArrayKeys);
// ["fourthvalue", "fifthvalue", "sixthvalue", "firstvalue", "secondvalue", "secondvalue"]
// It did remove them, but there are now two "secondvalue"s.
}
如有任何帮助,我们将不胜感激。
这是一个有点愚蠢的问题。有人指出,在文档中,它说它必须重新分配给自己。
Note that remove does not change the length of the original range directly; instead, it returns the shortened range. If its return value is not assigned to the original range, the original range will retain its original length, though its contents will have changed.
来源:https://dlang.org/library/std/algorithm/mutation/remove.html
解决方法如下:
assocArraykeys = assocArrayKeys.remove(0);
assocArrayKeys = assocArrayKeys.remove(5);
这对我来说似乎有点愚蠢和不直观,因为它在 std.algorithm.mutation
中。关键字:突变.