我想将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"]]
=〜用最后添加的元素替换数组中的所有元素。我哪里做错了?我怎样才能达到我的期望?
答案 0 :(得分:1)
这里的问题是byLine
正在重用buf
(这实际上是它要求一个可变缓冲区并返回mutable的一个原因 - 作为警告,它可能会改变你)。
所以,当你〜=它时,它实际上是多次用一个指向相同数据的指针多次附加一个数组,所以当它发生变化时,每次都会看到这种变化。
您可以通过向要附加的阵列添加.dup
来解决此问题。