2015-04-26 83 views
1

的我开始与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); 

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

回答

4

list[] = slice1;

我想你期望这个追加slice1到列表中,如PHP。但D中的含义是:“将slice1分配给列表中的每个元素。”由于你的名单没有任何元素,所以没有任何改变。

对于追加,使用~=操作符:

list ~= slice1;

4

MySlice []是串[INT],即,变量 '列表' 的每个元件的阵列是字符串[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在一个字符串[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"]