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