D语言游戏编程(6):D语言基础之Arrays

以下是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);
}
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章