• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Javen-Studio 咖啡小屋

            http://javenstudio.org - C++ Java 分布式 搜索引擎
            Naven's Research Laboratory - Thinking of Life, Imagination of Future

              C++博客 :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              24 隨筆 :: 57 文章 :: 170 評(píng)論 :: 4 Trackbacks

            4.2         聚合操作符(Aggregation Operators

            有幾個(gè)標(biāo)準(zhǔn)查詢(xún)操作符(standard query operators)定義用來(lái)聚合(aggregating)一組值的序列(a sequence of values)成一個(gè)單獨(dú)的值(a single value)。最普通的聚合操作符(most general aggregation operator)就是 Fold,它的定義看起來(lái)如下所示:

             

            public static U Fold<T, U>(this IEnumerable<T> source, 
                                       U seed, Func
            <U, T, U> func) {
              U result 
            = seed;

              
            foreach (T element in source) 
                  result 
            = func(result, element);

              
            return result;
            }

             

            Fold 操作符使它對(duì)一組值的序列(a sequence of values)簡(jiǎn)單地執(zhí)行一個(gè)計(jì)算(perform a calculation)處理。Fold 工作的方式是對(duì)基本的序列(the underlying sequence)的每一個(gè)成員調(diào)用一次 lambda 表達(dá)式。每一次 Fold 調(diào)用 lambda 表達(dá)式的時(shí)候,它既從序列(sequence)傳遞(passes)成員(members)又傳遞一個(gè)聚合的值(aggregated value)(該初始化的值(initial value)對(duì) Fold 是基于種子參數(shù)(seed parameter))。Lambda 表達(dá)式的結(jié)果替換了以前的聚合的值(the previous aggregated value),Fold 返回了 lambda 表達(dá)式的最終結(jié)果(the final result)。

             

            例于,下面的程序使用 Fold 累計(jì)(accumulate)計(jì)算一個(gè)字符串?dāng)?shù)組的所有字符數(shù)目(total character count):

             

            string[] names = "Albert""Burke""Connor""David",
                               
            "Everett""Frank""George""Harris"}
            ;

            int count = names.Fold(0, (c, s) => c + s.Length);
            // count == 46

             

            除了(In addition to)這個(gè)有多種用途(general purpose)的 Fold 操作符之外,標(biāo)準(zhǔn)查詢(xún)操作符(standard query operators)還包含一個(gè)多用途的 Count 操作符,和四個(gè)數(shù)字聚合(numeric aggregation)操作符(Min, Max, Sum, Average),以簡(jiǎn)單化(simplify)這些普通的聚合操作(common aggregation operations)。數(shù)字聚合操作符檢查(work over)數(shù)字類(lèi)型(numeric types)(如 int, double, decimal)的序列,或者在一個(gè)方法(function)提供的時(shí)候檢查任意值(arbitrary values)的序列(sequences),以映射(projects)序列的成員(members of the sequence)為一個(gè)數(shù)字類(lèi)型(a numeric type)。

             

            下面的程序闡明(illustrates)了剛才描述的 Sum 操作符的兩個(gè)方面(both forms of):

             

            int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

            string[] names = { "Albert", "Burke", "Connor", "David",

                               "Everett", "Frank", "George", "Harris"};

             

            int total1 = numbers.Sum();            // total1 == 55

            int total2 = names.Sum(s => s.Length); // total2 == 46

             

            注意第二個(gè)使用 Sum 的語(yǔ)句與前面使用 Fold 的程序是相等的(equivalent to)。

             

             

              

             

            待續(xù), 錯(cuò)誤難免,請(qǐng)批評(píng)指正,譯者Naven 2005-10-24

            posted on 2005-10-25 02:00 Javen-Studio 閱讀(1248) 評(píng)論(0)  編輯 收藏 引用

            只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            久久夜色精品国产亚洲| 99精品国产在热久久无毒不卡| 日本精品久久久久久久久免费| 久久频这里精品99香蕉久| 狠狠色丁香久久综合婷婷| 综合久久精品色| 国产成人99久久亚洲综合精品| 久久久久久久女国产乱让韩| 99久久精品国产一区二区| 久久中文字幕人妻熟av女| 精品人妻伦一二三区久久| 久久夜色精品国产噜噜噜亚洲AV| 国产99久久久久久免费看| 日韩人妻无码精品久久免费一| 久久久WWW成人| 国内精品人妻无码久久久影院| 一本大道久久香蕉成人网| 国产99久久久久久免费看| 精品无码久久久久久午夜| 国产精品99久久久精品无码| 久久精品这里只有精99品| 四虎国产精品免费久久久| 精品乱码久久久久久久| 欧美大香线蕉线伊人久久| 国产69精品久久久久APP下载| 精品久久人人妻人人做精品| 老司机国内精品久久久久| 激情伊人五月天久久综合| 久久九九精品99国产精品| 无码人妻少妇久久中文字幕蜜桃| 亚洲婷婷国产精品电影人久久 | 亚洲精品无码久久久影院相关影片| 久久精品无码专区免费| 久久精品国产亚洲5555| 久久久久成人精品无码| 久久强奷乱码老熟女网站| 亚洲国产日韩欧美综合久久| 亚洲国产成人久久一区久久| 亚洲精品国精品久久99热| 女人高潮久久久叫人喷水| 欧美伊人久久大香线蕉综合 |