发新话题
打印

[转载D语言文档] D语言基础之Arrays

D语言基础之Arrays

知识若不分享 实在没有意义 http://www.d-programming-language-china.org 20070427

点击下面网址查看原文:
http://www.d-programming-language-china.org

by: 燕良
from: http://blog.csdn.net/yanonsoftware/archive/2007/01/11/1480432.aspx

以下是D语言数组的一些演示代码:

import std.stdio;

void main()
{
    tryArrays();
}

void tryArrays()
{
    // 指针和C语言的类似,由于没有bounds checking,所以应尽量使用动态数组,out,ref参数
    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;
    writefln("aa:");
    foreach(int e; aa)
        writef(e);
    writefln();

    // ~可以用来连接数组
    d = s[1..$] ~ aa;
    writefln("d:");
    foreach(int e; d)
        writef(e);
    writefln(",",d.length);

    /* 数组切片
    D语言论坛 http://www.d-programming-language-china.org ;补充
    d = s;是一个隐含的切片,相当于d = s[];切片只是原数组的引用而不复制数据
    下面的例子,改变s也就改变了d;
    */
    d = s;
    s[2]=7;
    writefln("d:");
    foreach(int e;d)
        writef(e);
    writefln();

    // ~操作符用来连接数组
    d ~= s;
    writefln("d ~=s, d:");
    foreach(int e;d)
        writef(e);
    writefln();

    // 数组属性
    d.sort;
    d.reverse;
    writefln("d=",d," d.sizeof=",
                    d.sizeof," d.length=",
                    d.length," d.ptr=",
                    d.ptr," d.dup=",
                    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("abc=",str2int["abc"]);

    str2int.remove("abc");

    // 使用in可以得到一个value指针
    int* pVal = ("abc" in str2int);
    assert(pVal == null);
    pVal = ("defg" in str2int);
    writefln("defg=",*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("str2int.keys=",keys);

    int[] values = str2int.values;
    writefln("str2int.values=",values);
}

D语言论坛 http://www.d-programming-language-china.org 补充:

上面例子代码d-programming-language-china.org进行了一些修改和补充。编译运行后输出如下信息:

QUOTE:
0000
aa:
111222
d:
45111222,8
d:
347
d ~=s, d:
347347
d=[7,7,4,4,3,3] d.sizeof=8 d.length=6 d.ptr=913FE0 d.dup=[0007,0007,0004,0004,0003,0003],
abc=100
defg=200
4,2
str2int.keys=[hij,defg]
str2int.values=[200,200]
( lastupdate:20070427 最新文章请访问http://www.d-programming-language-china.org )

关于一大步成功社区:
yidabu提倡在交流中学习,在分享中提高
收集感兴趣的知识,写下心得,通过网络与别人一起分享
理解一点就实践一步,收获什么就分享什么,成功就是这样一点点一步步累积起来的
网络只是一个工具,只有自己身心提高才是实实在在的。d-programming-language-china.org为大家提供一个学习交流各种知识的平台

TOP

发新话题