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

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>
            久久免费精品日本久久中文字幕| 99香蕉国产精品偷在线观看| 欧美中文日韩| 午夜激情一区| 久久久水蜜桃| 美女日韩在线中文字幕| 久久一区免费| 欧美高清自拍一区| 国产精品大全| 国产亚洲二区| 亚洲国产二区| 一区二区三区久久精品| 亚洲欧美一区二区原创| 久久精品理论片| 欧美va天堂| 亚洲毛片在线观看.| 亚洲一区二区三区四区视频 | 国产欧美日韩| 一区精品在线| 在线亚洲伦理| 久久欧美肥婆一二区| 亚洲福利视频专区| 亚洲欧美日韩精品久久亚洲区| 一本高清dvd不卡在线观看| 最新日韩欧美| 亚洲无吗在线| 每日更新成人在线视频| 亚洲精品一区二区三区婷婷月 | 欧美破处大片在线视频| 欧美亚韩一区| 亚洲电影天堂av| 欧美一区亚洲二区| 亚洲日韩视频| 久久综合伊人77777麻豆| 国产精品视频999| 野花国产精品入口| 久久综合图片| 先锋影音国产一区| 欧美日韩在线另类| 亚洲精选在线| 欧美sm视频| 久久嫩草精品久久久精品| 国产精品视频最多的网站| 在线亚洲精品| 亚洲黄色在线看| 女生裸体视频一区二区三区| 国产自产在线视频一区| 久久电影一区| 亚洲午夜精品在线| 欧美性视频网站| 这里是久久伊人| 亚洲精选久久| 欧美日韩成人一区| 99视频在线观看一区三区| 欧美寡妇偷汉性猛交| 久久岛国电影| 国外成人性视频| 久久精品中文字幕一区二区三区 | 久久综合九色综合网站| 亚洲最黄网站| 欧美日韩另类视频| 99视频精品在线| 亚洲娇小video精品| 欧美国产精品中文字幕| 91久久精品久久国产性色也91| 久久久久久夜| 久久国产视频网站| 伊人狠狠色j香婷婷综合| 久久精品国产精品| 久久成人18免费网站| 国内一区二区三区| 欧美a级片网| 麻豆乱码国产一区二区三区| 在线免费一区三区| 欧美激情亚洲视频| 欧美日本一区二区高清播放视频| 亚洲精品之草原avav久久| 亚洲电影欧美电影有声小说| 麻豆精品视频在线观看| 噜噜爱69成人精品| 99re6热只有精品免费观看| 99精品99久久久久久宅男| 国产精品视频免费在线观看| 久久久精品一区| 欧美成人国产va精品日本一级| 亚洲作爱视频| 午夜免费在线观看精品视频| 影音先锋欧美精品| 亚洲美女尤物影院| 国产综合欧美| 亚洲美女视频| 一区二区亚洲精品国产| 亚洲精品你懂的| 欧美午夜片在线免费观看| 欧美一区二区三区在线看| 久久综合九色综合欧美就去吻| 影音先锋久久久| 亚洲一级网站| 亚洲剧情一区二区| 久久国产一二区| 国产精品99久久久久久久女警| 小黄鸭精品aⅴ导航网站入口| 最新中文字幕亚洲| 久久成人久久爱| 中日韩高清电影网| 久热精品在线视频| 久久国产精品99国产| 欧美女同视频| 蜜桃久久精品乱码一区二区| 国产精品视频一区二区高潮| 亚洲欧洲日本mm| 极品少妇一区二区| 亚洲午夜久久久久久尤物| 亚洲人成在线播放| 午夜精品理论片| 亚洲午夜精品一区二区三区他趣 | 久久精品亚洲一区二区| 亚洲免费在线| 欧美日本网站| 亚洲人成毛片在线播放女女| 国产亚洲精品久久久久久| 亚洲九九精品| 亚洲精选久久| 欧美劲爆第一页| 欧美激情精品久久久久久免费印度| 国产日韩在线看| 亚洲在线日韩| 欧美一区二区观看视频| 欧美午夜免费影院| 99在线精品视频| 一区二区三区高清在线观看| 欧美多人爱爱视频网站| 欧美激情视频一区二区三区免费| 黄网站免费久久| 久久精品首页| 欧美国产激情| 亚洲精品久久久久久久久久久久| 久久综合综合久久综合| 欧美成人国产va精品日本一级| 精品不卡在线| 另类激情亚洲| 亚洲人成小说网站色在线| 欧美三级电影一区| 99re66热这里只有精品3直播| aⅴ色国产欧美| 欧美色图五月天| 一区二区三区视频免费在线观看| 亚洲亚洲精品三区日韩精品在线视频 | 亚洲一区久久久| 久久er精品视频| 一区在线影院| 女女同性精品视频| 亚洲免费不卡| 欧美亚洲自偷自偷| 精品av久久久久电影| 欧美电影在线观看完整版| 亚洲精品在线免费观看视频| 亚洲一区二区黄| 国内免费精品永久在线视频| 久久免费的精品国产v∧| 亚洲国产免费| 亚洲欧美日本国产有色| 国产综合久久久久久鬼色| 免费看av成人| 一本久久a久久免费精品不卡| 欧美影院在线播放| 亚洲欧洲一区二区三区久久| 欧美午夜精品久久久久久久| 久久av免费一区| 亚洲韩国青草视频| 亚欧成人在线| 亚洲黄色视屏| 国产喷白浆一区二区三区| 久久婷婷国产综合尤物精品| 日韩视频不卡中文| 久久躁日日躁aaaaxxxx| 亚洲四色影视在线观看| 影音先锋久久资源网| 国产精品青草久久| 欧美激情aⅴ一区二区三区| 亚洲欧美精品在线观看| 亚洲国产精彩中文乱码av在线播放| 亚洲综合精品四区| 亚洲激情视频在线观看| 国产日韩精品一区二区| 欧美日韩精品一区二区| 久久婷婷麻豆| 午夜精品视频| 在线亚洲免费| 亚洲激情精品| 欧美成年人视频网站欧美| 性欧美18~19sex高清播放| 亚洲美洲欧洲综合国产一区| 韩国福利一区| 国产日韩一区| 国产精品毛片a∨一区二区三区| 蜜桃av综合| 久久久成人精品| 午夜精品久久久久久久男人的天堂| 亚洲国产日韩综合一区|