Key-> Value数组的数组

时间:2015-04-26 08:50:13

标签: arrays multidimensional-array d

我从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);

它编译但列表保持为空。我错过了什么?

2 个答案:

答案 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"]