2016-01-30 124 views
2

我正在看docs並不能理解熱可以創建元組數組。它編譯罰款:D:如何創建元組數組?

auto myDataTuple = tuple(url, path); 

但是這個代碼產生錯誤:

auto myDataTuples [] ~= myDataTuple; 

Error: no identifier for declarator myDataTuples[].

它無法理解myDataTuples或什麼類型的?

回答

5

您不能附加到聲明,因爲它還不存在。

該類型tuple(x, y)返回的是Tuple!(typeof(x), typeof(y))。你可以製作一組數字。所以如果URL和路徑都是字符串,請嘗試:

Tuple!(string, string)[] myDataTuple; // the [] makes an array 
myDataTuple ~= tuple(url, path); 

PS:我認爲結構基本上總是優於元組。 (無論如何,Tuple只是一個生成的結構體)。你也可以做struct MyData { string url; string path; },也可以使用MyData。以後會更容易實現它。

+0

感謝亞當! 但是,我可以訪問元組元素而不是索引像'[0]',但爲像名稱:tuple [「url」](我談論單個元組,而不是他們的數組) –

+0

然後,你必須命名他們也是...這就像'Tuple!(字符串,「url」,字符串,「路徑」)'http://dpldocs.info/experimental-docs/std.typecons.Tuple.html –

+0

我唯一一次看到一個元組比一個結構體系更適合MRV,它可以直接作爲一個函數調用中的參數,並且可以解壓調用(aggregate.getMRV [0.. $])',這對於結構體來說是不可能的。 –

3

要使用一組現有變量的定義數組和值,你可以列出他們在大括號[]和聲明數組就像一個普通的變量:

string url, path; 
auto myDataTuple = tuple(url, path); 
auto myDataTuples = [myDataTuple]; 
// Print out the type for better understanding: Tuple!(string, string)[] 
writeln(typeof(myDataTuples).stringof); 

這將創建一個新的動態數組可以附加到的元素。

追加到現有陣列的工作原理是這樣的:

// Append an item (variable and literal) 
myDataTuples ~= anotherTuple; 
myDataTuples ~= tuple(url2, path2); 

// Append an array (variable and literal) 
myDataTuples ~= anotherArray; 
myDataTuples ~= [tuple(url3, path3), tuple(url4, path4)];