void main()
{
tryArrays();
}
void tryArrays()
{
// 指針和C語言的類似,由於沒有bounds checking,所以應儘量使用動態數組,out,inout參數
int *p;
writefln(p);
int[3] s = [3,4,5]; //static array, 總容量不可以超過16M
int[] d; // dynamic array
int[4][3] b; // 3個int型數組,每個數組有4個元素
int[][5] c; // 5個int型動態數組
int[6] aa;
aa[0..3] = 1;
aa[3..6] = 2;
foreach(int e; aa)
writef(e);
writefln();
// ~可以用來連接數組
d = s[1..$] ~ aa;
foreach(int e; d)
writef(e);
writefln(",",d.length);
// 數組拷貝
d = s;
foreach(int e;d)
writef(e);
writefln();
// ~操作符用來連接數組
d ~= s;
foreach(int e;d)
writef(e);
writefln();
// 數組屬性
d.sort;
d.reverse;
writefln(d,", ",
d.sizeof,", ",
d.length,", ",
d.ptr,",",
d.dup,",");
int *pD = d.ptr;
//------------------------------------
// Associative Arrays類似於STL的map或者hash_table
int[char[]] str2int;
str2int["abc"] = 100;
str2int["defg"] = 200;
str2int["hij"] = 200;
writefln(str2int["abc"]);
str2int.remove("abc");
// 使用in可以得到一個value指針
int *pVal = ("abc" in str2int);
assert(pVal == null);
pVal = ("defg" in str2int);
writefln(*pVal);
/*如果使用class作爲key,則必須重載Object的下列函數:
hash_t toHash()
int opEquals(Object)
int opCmp(Object)
如果struct作爲key, 則必須實現:
hash_t toHash()
int opEquals(S) or int opEquals(S*)
int opCmp(S) or int opCmp(S*)
*/
// Properties
writefln(str2int.sizeof, ",",
str2int.length);
char[][] keys = str2int.keys;
writefln(keys);
int[] values = str2int.values;
writefln(values);
}