我正在看docs並不能理解熱可以創建元組數組。它編譯罰款:D:如何創建元組數組?
auto myDataTuple = tuple(url, path);
但是這個代碼產生錯誤:
auto myDataTuples [] ~= myDataTuple;
Error: no identifier for declarator myDataTuples[].
它無法理解myDataTuples
或什麼類型的?
我正在看docs並不能理解熱可以創建元組數組。它編譯罰款:D:如何創建元組數組?
auto myDataTuple = tuple(url, path);
但是這個代碼產生錯誤:
auto myDataTuples [] ~= myDataTuple;
Error: no identifier for declarator myDataTuples[].
它無法理解myDataTuples
或什麼類型的?
您不能附加到聲明,因爲它還不存在。
該類型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
。以後會更容易實現它。
要使用一組現有變量的定義數組和值,你可以列出他們在大括號[]和聲明數組就像一個普通的變量:
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)];
感謝亞當! 但是,我可以訪問元組元素而不是索引像'[0]',但爲像名稱:tuple [「url」](我談論單個元組,而不是他們的數組) –
然後,你必須命名他們也是...這就像'Tuple!(字符串,「url」,字符串,「路徑」)'http://dpldocs.info/experimental-docs/std.typecons.Tuple.html –
我唯一一次看到一個元組比一個結構體系更適合MRV,它可以直接作爲一個函數調用中的參數,並且可以解壓調用(aggregate.getMRV [0.. $])',這對於結構體來說是不可能的。 –