青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Javen-Studio 咖啡小屋

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

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  24 隨筆 :: 57 文章 :: 170 評論 :: 4 Trackbacks

4           其他標準查詢操作符(More Standard Query Operators

在最上面描述的基本的查詢技巧(query facilities)中,許多操作符(a number of operators)提供有用的方式(useful ways)來操作序列(manipulating sequences)和組裝查詢(composing queries),通過使用便利(convenient)的標準查詢操作符(standard query operators)的框架(framework)讓用戶在結果(over the result)之上有很高的控制程度(high degree of control)。

 

4.1         排序和分組操作(Sorting and Grouping

通常(In general),查詢表達式(query expression)的賦值(evaluation)導致(產生)(results in)的一個序列的值(sequence of values),并且以某種順序(in some order)產生(produced),這是基本的信息源(the underlying information sources)的固有性質(intrinsic)。為了讓開發者清楚地控制(explicit control)數據序列產生的順序,所以定義了標準查詢操作符(standard query operators)來控制順序(controlling the order)。其中最基本的操作符就是 OrderBy

 

OrderBy OrderByDescending 操作符可以用來應用于任何信息源(any information source),允許用戶提供一個制造出(produces)用來給結果排序(used to sort the results)的值的一個關鍵詞分解函數(key extraction function)。OrderBy OrderByDescending 操作符也可以接收(accept)可選的比較函數(optional comparison function),這個函數可以用來給關鍵詞(keys)的排序強加上(impose)一個次序的排序(partial order)。讓我們看看下面這段基礎的例子:

 

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

// unity sort
var s1 = names.OrderBy(s => s); 
var s2 
= names.OrderByDescending(s => s);

// sort by length
var s3 = names.OrderBy(s => s.Length); 
var s4 
= names.OrderByDescending(s => s.Length);

 

前面兩個查詢表達式產生新的序列是基于字符串比較(based on string comparison)的對數據源成員的排序方式(based on sorting the members of the source)產生的。下面兩個查詢產生的序列是基于每個字符串長度(based on the length of each string)的對數據源成員的排序(sorting the members of the source)方式產生的。

 

為了允許多次排序的標準(multiple sort criteria),OrderBy OrderByDescending 操作符都返回 SortedSequence<T> 接口 而不是通常的 IEnumerable<T>.接口。兩個只定義在 SortedSequence<T> 接口之上的操作符,被稱作 ThenBy ThenByDescending,它們用來應用一個附加的(并且次序的)的排序標準(additional (subordinate) sort criterion)。ThenBy/ThenByDescending 操作符它們自己返回 SortedSequence<T> 接口,而且允許應用許多(any number of)次 ThenBy/ThenByDescending 操作符:

 

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

var s1 
= names.OrderBy(s => s.Length).ThenBy(s => s);

 

在這個例子中,變量 s1 所引用(referenced)的查詢的賦值(Evaluating the query)將產生出(yield)下面的值的序列(sequence of values):

 

"Burke""David""Frank"
"Albert""Connor""George""Harris"
"Everett"

 

除了(In addition toOrderBy 種類的操作符(OrderBy family of operators),標準查詢操作符(standard query operators)還包括一個 Reverse 操作符。Reverse 操作符簡單地在一個序列上進行枚舉(enumerates)操作,產生(yields)一個以相反順序排序(in reverse order)的包含相同成員的一組值。與 OrderBy 不同,Reverse 在決定排序(determining the order)的時候不考慮那些值自己的真實內容(actual values themselves),而是單獨地依靠(relies solely)基本數據源(the underlying source)所產成的值的順序。

 

OrderBy 操作符影響(imposes)一組值的序列(a sequence of values)的排列順序(a sort order)。標準查詢操作符還包括 GroupBy 操作符,它影響一組值的序列的分割(partitioning,基于一個關鍵詞分解函數(a key extraction function)。GroupBy 操作符返回一個分組的值(Grouping values)的序列,一組會遇到的每一個單獨的關鍵詞的值的序列(one for each distinct key value that was encountered)。每一分組(each grouping)既包含了關鍵詞(key)又(as well as)包含了映射到(mapped to)這個 key 的那一組值(the group of values)。分組(Grouping)的公開標識(public contract)看起來像如下的代碼:

 

public sealed class Grouping<K, T> {
  
public Grouping(K key, IEnumerable<T> group);
  
public Grouping();
  
public K Key getset; }
  
public IEnumerable<T> Group setget; }
}

 

最簡單的使用 GroupBy 程序看起來如下所示:

 

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

// group by length
var grouping = names.GroupBy(s => s.Length);

foreach (Grouping<intstring> group in grouping) {
    Console.WriteLine(
"Strings of length {0}", group.Key);

    
foreach (string value in group.Group)
        Console.WriteLine(
"  {0}", value);
}
    

 

當運行后,此段程序將打印出如下的結果:

 

Strings of length 6
  Albert
  Connor
  George
  Harris
Strings of length 
5
  Burke
  David
  Frank
Strings of length 
7
  Everett

 

Select GroupBy 關鍵詞允許你提供一個映射函數(projection function)來移動分組的成員(populate members of the groups):

 

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

// group by length
var grouping = names.GroupBy(s => s.Length, 
                             s 
=> s[0]);
foreach (Grouping<intchar> group in grouping) {
    Console.WriteLine(
"Strings of length {0}", group.Key);

    
foreach (char value in group.Group)
        Console.WriteLine(
"  {0}", value);
}
  

 

這個變化(variation)將打印出如下結果:

 

Strings of length 6
  A
  C
  G
  H
Strings of length 
5
  B
  D
  F
Strings of length 
7
  E

 

從這個例子中需要注意的是,投影類型(projected type)不需要跟數據源一模一樣。既然這樣(In this case),我們從一個字符串的序列(a sequence of strings)創建了一個從整型(integers)到字符(characters)的分組。

 

 

 

 

待續, 錯誤難免,請批評指正,譯者Naven 2005-10-24

posted on 2005-10-25 00:32 Javen-Studio 閱讀(1111) 評論(0)  編輯 收藏 引用
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久综合婷婷| 在线不卡亚洲| 久久久999精品视频| 久久久久久国产精品mv| 亚洲欧美一区二区三区久久 | 亚洲精品一区久久久久久| 亚洲国产精品免费| 亚洲欧洲一区二区天堂久久| 亚洲激情av在线| 在线亚洲精品福利网址导航| 亚洲免费影视第一页| 午夜视频一区| 久久亚洲精品一区二区| 欧美粗暴jizz性欧美20| 免费亚洲网站| 欧美日韩在线精品一区二区三区| 国产精品精品视频| 国产午夜精品全部视频播放| 一区二区亚洲欧洲国产日韩| 亚洲精品一二三| 午夜精品久久久久久久久久久久久| 久久精品国产成人| 欧美二区在线观看| 在线视频日韩| 蜜月aⅴ免费一区二区三区| 欧美日韩国产页| 国产一区二区三区在线观看免费视频 | 久久手机精品视频| 亚洲国产另类 国产精品国产免费| 亚洲精品日本| 午夜亚洲视频| 欧美日一区二区在线观看| 国产一区二区三区高清在线观看| 亚洲高清不卡在线| 性欧美精品高清| 亚洲日本电影在线| 欧美一区综合| 国产精品亚洲欧美| 亚洲欧洲精品一区二区三区不卡| 午夜亚洲福利| 日韩亚洲不卡在线| 免费成人高清视频| 国产一区二区三区在线观看网站 | 99伊人成综合| 久热精品视频在线免费观看 | 国产精品乱码一区二三区小蝌蚪| 亚洲激情综合| 麻豆精品视频在线| 性色av香蕉一区二区| 欧美日韩一区二| 亚洲精品护士| 亚洲第一毛片| 老妇喷水一区二区三区| 国产综合视频在线观看| 欧美尤物巨大精品爽| 一区二区高清在线| 欧美日韩久久| 一区二区三区四区在线| 亚洲精品一二三| 欧美激情精品久久久久| 亚洲国产精品免费| 免费在线播放第一区高清av| 欧美一区日韩一区| 国产一区视频观看| 亚洲精选91| 91久久精品国产91久久性色| 美国十次了思思久久精品导航| 好男人免费精品视频| 久久精选视频| 久久久欧美精品| 亚洲国产一区在线| 欧美激情无毛| 女人天堂亚洲aⅴ在线观看| 亚洲激情社区| 亚洲精品在线免费| 国产精品久久久久久久久久尿 | 亚洲一区二区在线| 亚洲国产综合91精品麻豆| 亚洲欧美激情四射在线日| 国产精品日日摸夜夜摸av| 性色av一区二区怡红| 亚洲综合首页| 激情六月综合| 亚洲激情在线观看| 国产精品高清在线| 久久精品夜色噜噜亚洲aⅴ| 久久久久久9| 亚洲另类视频| 亚洲午夜免费视频| 精品999久久久| 亚洲精品视频在线看| 国产精品视频xxx| 美国成人直播| 欧美另类69精品久久久久9999| 午夜激情亚洲| 久久视频这里只有精品| 一本色道久久| 久久精品成人一区二区三区 | 欧美伊久线香蕉线新在线| 在线精品视频一区二区| 亚洲欧洲精品一区二区三区| 国产精品久久久久久久久| 美女亚洲精品| 国产精品区二区三区日本| 免费在线国产精品| 国产精品乱码人人做人人爱| 欧美国产日韩xxxxx| 国产精品专区h在线观看| 亚洲高清资源综合久久精品| 国产精品专区一| 日韩视频免费观看高清在线视频 | 亚洲图中文字幕| 亚洲精品久久久久久久久久久久| 亚洲欧美电影院| 99精品视频免费全部在线| 欧美专区日韩视频| 亚洲欧美国产高清| 欧美精品成人| 欧美成人第一页| 国产字幕视频一区二区| 一区二区三区**美女毛片| 亚洲日本久久| 久久综合婷婷| 免费亚洲视频| 在线精品亚洲| 久久精品国亚洲| 久久精彩视频| 国产欧美在线视频| 亚洲一区二区在线| 亚洲欧美影音先锋| 欧美视频一区二区三区…| 亚洲激情影视| avtt综合网| 欧美日韩国产成人在线免费| 亚洲第一搞黄网站| 亚洲欧美一区在线| 欧美日本不卡视频| 亚洲日本欧美天堂| 亚洲另类一区二区| 欧美激情日韩| 亚洲人精品午夜| aa国产精品| 国产精品激情av在线播放| 99国产精品国产精品久久| 99re8这里有精品热视频免费| 欧美fxxxxxx另类| 亚洲黄色性网站| 9色精品在线| 欧美午夜视频在线| 亚洲一区二区在| 久久久综合精品| 亚洲高清色综合| 欧美国产国产综合| 99日韩精品| 久久国产精品久久久久久久久久| 国产日韩欧美麻豆| 久久精品人人做人人综合| 欧美777四色影视在线| 亚洲精品视频在线播放| 欧美日韩国产综合视频在线观看中文| 妖精视频成人观看www| 欧美亚洲午夜视频在线观看| 国产在线不卡精品| 欧美黄色免费| 亚洲欧美久久久久一区二区三区| 久久久久久久久久久久久9999| 亚洲国产精品电影| 欧美视频在线观看免费| 欧美一区在线直播| 亚洲精品一区二区三区在线观看| 欧美一区二区啪啪| 亚洲精品日日夜夜| 国产欧美精品日韩精品| 久久嫩草精品久久久久| 一区二区欧美日韩| 欧美黄色网络| 久久av红桃一区二区小说| 亚洲精品在线观| 国自产拍偷拍福利精品免费一| 欧美激情久久久久久| 欧美一级艳片视频免费观看| 91久久精品国产| 久久香蕉精品| 亚洲欧美一区二区精品久久久| 亚洲国产精品一区二区第四页av| 国产精品porn| 欧美成人精品在线观看| 中文日韩欧美| 欧美激情精品| 久久久久国产一区二区| 欧美性事在线| 欧美bbbxxxxx| 亚洲精品老司机| 欧美刺激午夜性久久久久久久| 在线中文字幕一区| 国产精品伊人日日| 欧美视频导航| 久久综合给合| 亚洲欧美高清| 亚洲一区二区三区四区在线观看|