2015-04-26 82 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"]