键数组->值数组

Array of Key->Value array

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

编译成功但列表为空。我错过了什么?

list[] = slice1;

我猜您希望这会将 slice1 附加到列表中,如 PHP 中那样。但是 D 中的意思是:"Assign slice1 to each of the elements in the list." 因为你的列表没有元素,所以什么都没有改变。

要追加,请使用 ~= 运算符:

list ~= slice1;

MySlice[]是一个string[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"]]

如果要将两个数组 slice1 和 slice2 连接到一个 string[int] 数组中,您需要遍历每个数组并将元素复制到列表中

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