2012-12-06 9 views
25

groupByとToLookup拡張メソッドの違いは何ですか?lookupとgroupby

は、私たちは、このようなオブジェクトのリストを持ってみましょう:

public class Person 
{ 
    public uint Id { get; set; } 
    public string Name { get; set; } 
    public DateTime Birthday { get; set; } 
} 


List<Person> People { get; set; } 

は、今私は、上記の拡張メソッドを使用することができます。

var groupedPeople = People.GroupBy((x) => x.Id); 

var lookupPeople = People.ToLookup((x) => x.Id); 

をこれらのステートメントの違いは何ですか?

ありがとうございます。

マルコB.

+0

"差分"を定義する... 1つの違いは "戻り値"、別の具体的な実装...精巧な可能性があります! –

+0

http://bytes.com/topic/c-sharp/answers/777912-linq-groupby-vs-tolookup –

+1

http://stackoverflow.com/questions/1337539/ilookuptkey-tval-vs-igroupingtkey-tval –

答えて

50

ToLookup即時実行を使用し、あなたがキーでグループを検索することができますILookupを返します。

GroupByは実行を延期使用し、わずかであることのないアイデアを、各グループが最初に発生した順序(第1のグループは、例えば、ソース・データの最初の要素を含むであろう)であなたのグループを返しますキーで後でグループを見ることができます。結果を反復処理するたびに、再度グループ化する必要があります。

基本的には、使用する必要があるのは結果によって何をするかによって異なります。 1回だけ繰り返す場合(たとえば、さらに変換する場合)、通常はGroupByが問題ありません。複数の操作のコレクションとしてそれらを保持したい場合は、直接の性質ToLookupが便利です。

9
  1. ToLookupがバッファされます。 groupByはグループを反復します。
  2. groupByはdeffered実行を使用し、ToLookupはimmediateを使用します。