附加到多维动态数组的D lang



我想添加一个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(这实际上是它要求一个可变缓冲区并返回可变的一个原因-作为一个警告,它可能会改变你)。

所以当你~=它时,它实际上是在多次追加一个数组,所有的都是指向相同的数据的指针,所以当它改变时,每次都能看到变化。

您可以通过添加.dup到您正在追加的数组来修复它。

相关内容

  • 没有找到相关文章

最新更新