码迷,mamicode.com
首页 > 编程语言 > 详细

D语言中range序列集的使用

时间:2016-08-01 19:29:12      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:

     D语言标准库中是这么解释Range的:

     Ranges generalize the concept of arrays,lists, or anything that involves sequential access

     意思是Range概括的数组,列表,或任何涉及顺序访问的概念,我们就叫它序列集吧,以区分aggregate(迭代集)与sets(键值集)。

     包文件range.d

一、chain函数

     把几个序列集连接到成一个序列集.

import std.stdio;
import std.range;
int main(string[] argv)
{
    int[] a = [1,2,3];
    int[] b = [4,5,6];
    auto c = chain(a , b);
    writeln("c len:",c.length);
    writeln("c:",c);
    writeln("c type is:",typeid(c));
    writeln("c[0]:",c[0]);
    writeln("c[3]:",c[3]);
    writeln("Items List:");
    foreach(i;c)
    {
        writeln(i);
    }
    readln();
    return 0;
}

技术分享

从运行结果来看,chain是把两个数组连接为一个对象,类型为std.range.chain(int[],int[]).chain.Result类型。

对这个单一的对象可以使用foreach操作来处理。也可以使用索引来访问,很不错的东西,看起来好像比C#里的IEnumerable功能多点,但IEnumerable的抽象更高一些,没有要求顺序访问和元素数量,只要求能迭代,可能aggregate是指的这个概念。

       IEnumerable只要求能枚举元素,这一点很重要,因为很多时候,不能要求数据都在内存中,比如对数据库记录的访问,数据很可能并不在内存中,如果有了数量的要求,那么也就使得Range不能很好的处理数据库数据访问问题。

      因此,Range只能叫做序列集,而不能称为枚举集,或是迭代集。而序列集应该也是属于迭代集的一种,既然Range是迭代集的一种,那么他是怎么实现让foreach访问的呢? 值研究的一个问题

D语言中range序列集的使用

标签:

原文地址:http://www.cnblogs.com/wanhongnan/p/5726727.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!