D lang附加到多维动态数组

时间:2015-05-30 12:36:42

标签: multidimensional-array d

我想将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"]]

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

1 个答案:

答案 0 :(得分:1)

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

所以,当你〜=它时,它实际上是多次用一个指向相同数据的指针多次附加一个数组,所以当它发生变化时,每次都会看到这种变化。

您可以通过向要附加的阵列添加.dup来解决此问题。