以下是D语言数组的一些演示代码:
import std.stdio;
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);
}
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);
}