我从D语言(D2)开始,我正在尝试执行以下操作:
string[int] slice1 = [ 0:"zero", 1:"one", 2:"two", 3:"three", 4:"four" ];
string[int] slice2 = [ 0:"zero", 1:"one", 2:"two"];
alias MySlice = string[int];
MySlice[] list;
list[] =slice1;
list[]=slice2;
writeln(list);
它编译但列表保持为空。我错过了什么?
答案 0 :(得分:4)
list[] = slice1;
我想您希望将slice1
附加到列表中,就像在PHP中一样。但D中的含义是:“将slice1
分配给列表中的每个元素。”由于您的列表没有元素,因此没有任何更改。
要进行追加,请使用~=
运算符:
list ~= slice1;
答案 1 :(得分:4)
MySlice []是一个字符串[int]的数组,即变量' list'的每个元素。是string [int]。如果那是你想要的,那么代码应该是
alias MySlice = string[int];
MySlice[] list;
list = [slice1];
list ~= [slice2];
writeln(list);
结果将是
[[0:"zero", 1:"one", 2:"two", 3:"three", 4:"four"], [0:"zero", 1:"one", 2:"two"]]
如果要在单个字符串[int]数组中连接两个数组slice1和slice2,则需要遍历每个数组并将元素复制到列表中
alias MySlice = string[int];
MySlice list;
foreach (k, v; slice1)
list[k] = v;
foreach (k, v; slice2)
list[k] = v;
writeln(list);
结果将是
[0:"zero", 4:"four", 1:"one", 2:"two", 3:"three"]