D lang附加到多维动态数组

D lang appending to multidimensional dynamic array

我想将一个 2D 数组附加到我的 3D 数组。我希望它应该与 int[] arr; arr ~= 3;

相同
void readInput()
{
    char[][][] candidate;
    char[] buff;
    size_t counter = 0;
    while (  stdin.readln(buff) )
    {
        char[][] line = buff.chomp().split();
        writeln(line);

        candidate ~= line; 
        writeln(candidate);
        if (++counter > 1 ) break; 
    }
}

然后我发送下面的输入

201212?4 64
20121235 93

我希望输出像

[["201212?4", "64"], ["20121235", "93"]]

但是我看到了

[["20121235", "93"], ["20121235", "93"]]

=~ 用最后添加的替换数组中的所有元素。我哪里做错了?我怎样才能达到我的期望?

这里的问题是 byLine 正在重用 buf(这实际上是它要求可变缓冲区和 returns 可变的原因之一 - 作为一个警告,它可能会改变你)。

所以当你 ~= 它时,它实际上是多次附加一个数组,所有的指针都指向 相同的 数据,所以当它发生变化时,每次都会看到该变化时间.

您可以通过向要附加的数组添加 .dup 来修复它。