• <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   管理


            男女久久久国产一区二区三区| 狠狠色综合网站久久久久久久高清 | 久久精品国产69国产精品亚洲| 午夜天堂精品久久久久| 国产成人精品白浆久久69| 青青青国产精品国产精品久久久久| 成人国内精品久久久久影院VR| 很黄很污的网站久久mimi色| 少妇无套内谢久久久久| 国内精品久久人妻互换| 久久青青草原精品国产不卡| 午夜精品久久久久久中宇| 精品国产一区二区三区久久蜜臀| 欧美久久一级内射wwwwww.| 精品无码久久久久国产| 亚洲欧美日韩久久精品| 高清免费久久午夜精品| 精品久久久久久中文字幕大豆网 | 久久亚洲精品国产精品婷婷| 久久精品一本到99热免费| 性做久久久久久免费观看| 伊人丁香狠狠色综合久久| 亚洲国产精品无码久久一区二区 | 亚洲国产精品久久| 久久久无码精品亚洲日韩蜜臀浪潮| 久久久久亚洲av成人无码电影 | 国产成人久久激情91| 新狼窝色AV性久久久久久| 精品久久久一二三区| 欧美成a人片免费看久久| 中文字幕亚洲综合久久| 国产精品久久久久无码av| 99久久99久久精品国产片果冻| 99久久国产综合精品女同图片| 久久久久99精品成人片| 97久久精品人人澡人人爽| 久久国产精品久久国产精品| 久久精品国产亚洲av水果派| 久久综合给久久狠狠97色| 久久人人爽人人爽人人AV| avtt天堂网久久精品|