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

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 閱讀(1118) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            国产一区二区精品久久91| 国产精品视频导航| 亚洲精品久久嫩草网站秘色| 欧美成人免费在线观看| 玖玖综合伊人| 99国内精品久久| 中文在线不卡视频| 国产亚洲一级高清| 欧美激情一区二区三区高清视频 | 久久精品主播| 91久久久久久久久| 一区二区三区视频在线看| 国产精品xxx在线观看www| 欧美在线观看视频在线 | 日韩视频第一页| 国产精品乱人伦一区二区| 久久精品女人| 美女日韩欧美| 欧美亚洲一区二区三区| 另类春色校园亚洲| 亚洲欧美国产高清va在线播| 欧美在线视频导航| 99国产精品视频免费观看| 亚洲欧美日韩成人| 亚洲精品一区二区三区蜜桃久| 一区二区三区日韩精品| 激情久久久久| 一本色道久久综合精品竹菊 | 香蕉免费一区二区三区在线观看| 欧美一区二区三区精品| 亚洲三级免费电影| 午夜精品999| 日韩亚洲欧美中文三级| 欧美在线啊v一区| 一区二区激情视频| 久久久天天操| 午夜视频久久久| 欧美绝品在线观看成人午夜影视| 久久久精品国产一区二区三区| 欧美激情在线狂野欧美精品| 久久亚洲私人国产精品va| 欧美午夜精品久久久久久浪潮 | 一区二区冒白浆视频| 久久福利电影| 午夜在线一区| 欧美日韩精品免费观看| 亚洲第一区色| 国产专区综合网| 午夜精品久久久久久久| 亚洲一区二区三区在线看| 欧美不卡一区| 欧美成va人片在线观看| 国产一区二区三区久久 | 久久精品女人| 欧美主播一区二区三区| 国产精品一区亚洲| 妖精成人www高清在线观看| 最新国产成人av网站网址麻豆| 久久久99爱| 久久久久综合一区二区三区| 国产偷国产偷精品高清尤物| 亚洲一二三区精品| 午夜精品久久久久久99热软件| 欧美另类一区二区三区| 亚洲国产精品久久久| 亚洲乱码国产乱码精品精可以看 | 国产精品国产三级国产a| 99精品国产99久久久久久福利| 99riav国产精品| 欧美区二区三区| av成人免费| 午夜国产精品视频| 国产欧美一区在线| 久久精品亚洲一区| 免费在线成人av| 亚洲精品国产精品乱码不99| 欧美国产日韩亚洲一区| 亚洲精品在线一区二区| 这里只有精品视频在线| 欧美日韩中文字幕在线| 亚洲欧美一区二区视频| 狼人天天伊人久久| 最近中文字幕日韩精品 | 国内外成人免费激情在线视频| 欧美一区二区三区四区在线| 美女久久一区| 99国产精品久久久久老师| 欧美日韩一区二区欧美激情| 亚洲欧美欧美一区二区三区| 久久综合福利| 日韩亚洲欧美一区二区三区| 国产精品黄视频| 久久精品亚洲国产奇米99| 欧美激情中文字幕一区二区 | 亚洲国产欧美一区二区三区久久 | 欧美精品999| 一本色道久久综合亚洲精品高清 | 亚洲无毛电影| 樱桃成人精品视频在线播放| 欧美日本在线播放| 午夜精品久久久久久久久| 欧美激情视频给我| 性欧美videos另类喷潮| 亚洲国产欧美日韩另类综合| 国产精品欧美久久| 欧美成人一区二免费视频软件| 中文在线一区| 亚洲第一福利在线观看| 欧美亚洲一区| 洋洋av久久久久久久一区| 国产一区二区无遮挡| 欧美日本高清一区| 久久看片网站| 亚洲综合三区| 亚洲美女精品久久| 免费亚洲婷婷| 久久在线精品| 欧美专区日韩专区| 亚洲午夜影视影院在线观看| 在线日韩中文字幕| 国产日韩一区二区三区在线| 欧美日韩日本视频| 蜜臀91精品一区二区三区| 欧美一区二区三区免费视| 亚洲一级黄色av| 99亚洲精品| 亚洲国产综合在线看不卡| 免费欧美日韩| 男女精品视频| 免费欧美高清视频| 免费视频一区二区三区在线观看| 久久精品亚洲一区二区三区浴池| 亚洲制服丝袜在线| 亚洲一区二区精品在线| 亚洲另类视频| 日韩亚洲在线| 中文日韩欧美| 在线综合欧美| 亚洲免费婷婷| 亚洲欧美日本日韩| 亚洲欧美日韩成人| 亚洲欧美中文日韩v在线观看| 亚洲先锋成人| 小处雏高清一区二区三区 | 亚洲一区二区三区精品动漫| 一区二区三区国产在线| 一区二区精品在线观看| 一区二区三区精品国产| 亚洲视频专区在线| 香蕉成人啪国产精品视频综合网| 亚洲综合精品四区| 午夜精品av| 久久久久免费| 欧美sm极限捆绑bd| 亚洲国产天堂久久综合| 亚洲精品黄色| 中文无字幕一区二区三区| 亚洲字幕在线观看| 久久国产综合精品| 噜噜噜噜噜久久久久久91| 欧美成人免费网站| 欧美日韩免费网站| 国产午夜精品在线| 亚洲人成毛片在线播放| 9色精品在线| 欧美影院视频| 欧美二区不卡| 一区二区三区国产精华| 欧美亚洲网站| 欧美激情一区| 国产模特精品视频久久久久| 激情一区二区三区| 一本到高清视频免费精品| 亚洲欧美一区二区激情| 久久免费午夜影院| 亚洲精品自在久久| 欧美在线看片| 欧美日韩精品免费观看| 国产一区久久久| 99热精品在线观看| 久久久久久香蕉网| 日韩视频在线免费| 久久人人97超碰精品888| 欧美三级在线| 在线看片第一页欧美| 亚洲综合色激情五月| 久热综合在线亚洲精品| 日韩一级黄色片| 久久一区二区三区超碰国产精品| 欧美视频在线一区二区三区| 狠狠综合久久av一区二区小说| 一区二区高清视频在线观看| 久久亚洲精品伦理| 亚洲一区久久久| 欧美韩国在线| 亚洲高清在线观看| 久久久久久久久久久久久女国产乱| 亚洲精品麻豆| 欧美成人午夜影院| 激情综合亚洲|