我想添加一个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
到您正在追加的数组来修复它。