2016年6月7日火曜日

[C#] LINQ(リンク)-3 (Enumerableクラス)

こんにちは。明月です。
今日はLINQ(リンク)の「Enumerable」について勉強します。
「Enumerable」は前の投稿で勉強したLINQ(メソッド)も含めていることですが、コレクションのタイプのクラスなら(リスト、ディクショナリ、テーブル等)データを扱うように「Enumerable」のクラスを拡張してメソッドを使えます。
すなわち「Enumerable」はデータを扱うクラスとして「Where」、「Orderby」、「Select」の以外に「Sum」、「Average」、「Max」、「Min」、「Aggregate」などのメソッドがあります。


そうすると今日は「Select」、「Where」、「OderBy」以外の「Enumerable」クラスメソッドについて勉強しましょう。


Max


Maxのメソッドはコレクションタイプのクラスの中でデータの最大値を救うものです。このメソッドの返却値は整数、実数のみです。すなわち、文字、文字列、ブール代数(Boolean)の値で返却をできないという意味です。



上の例をみるとリストにTestClassのクラスを格納してMaxメソッドで最大値を検索しています。すなわち匿名メソッドでクラスのNumberデータを返却して結果はそのクラス達の最大値が出ると予想になります。



Min


Minのメソッドはコレクションタイプのクラスの中でデータの最少値を救うものです。このメソッドもMaxと同じとおりに整数、実数のみに返却します。




Sum


Sumのメソッドはコレクションタイプのクラスの中でデータの合計値を救うものです。このメソッドもMaxとMinと同じとおりに整数、実数のみに返却します。




Average


Averageのメソッドはコレクションタイプのクラスの中でデータの平均値を救うものです。このメソッドもMaxとMinとSumと同じとおりに整数、実数のみに返却します。




ここまで数と関係がある「Enumerable」のメソッドを調べてみました。次からはデータを扱って処理する「Enumerable」クラスの「Aggregate」と「Zip」メソッドについて調べます。


Aggregate


Aggregateのメソッドはコレクションタイプのリストを繰り返してリストのデータを累積するものです。パラメタは累積しているデータと、新しく累積するデータを受け取ります。パラメタと返却値のデータタイプは対象のコレクションデータタイプと一致になります。




Zip


Zipメソッドは二つのコレクションを併合することです。すなわち、対象コレクションに他のリストのデータを同じインデックスとおりにデータを併合したい際に使います。
始めのパラメタは併合したいコレクションリスト、二つ目が匿名メソッドになりあます。匿名メソッドのデータタイプは初めは対象コレクションリストのデータタイプ、二つ目は併合するコレクションリストのデータタイプになります。コレクションリストのインデックスが合わないデータは処理しません。




今まで「Enumerable」のデータ数計算とデータを扱いメソッドについて調べてみました。
「LINQ」の「Enumerable」クラスのメソッドを使うと基本的に返却の値は「IEnumerable」インタフェースタイプになります。
ただ「IEnumerable」タイプを繰り返して使えることもできますが、他のコレクションに変換する時があるはずと思います。
それで「Enumerable」クラスは他のコレクションタイプに変換する「ToArray」、「ToList」、「ToDictionary」、「Single」のメソッドがあります。


ToList


「ToList」は「IEnumerable」から「リスト」タイプに変換する「Enumerable」のクラスメソッドです。パラメタはなしで、リストのデータタイプは「IEnumerable」の同じタイプに返却します。




ToDictionary


「ToDictionary」は「IEnumerable」から「ディクショナリ」タイプに変換する「Enumerable」のクラスメソッドです。匿名メソッドのパラメタはリストのオブジェクトを受けるし、返却値はキーを返却します。「ToDictionary」で返却したコレクションのキータイプは匿名メソッドで返却したデータタイプだし、値は「IEnumerable」のオブジェクトのタイプになります。




ToArray


「ToArray」は「IEnumerable」から「配列」タイプに変換する「Enumerable」のクラスメソッドです。パラメタはなしで、リストのデータタイプは「IEnumerable」の同じタイプに返却します。




Single


「Single」は「IEnumerable」のデータが一つの場合にコレクションタイプではなく、「IEnumerable」のオブジェクトのタイプに返却するメソッドです。




今までLINQの「Enumerable」について勉強しました。プログラムはホームページなどみたいにデータを扱わないプロジェクトもありますが、ほとんどデータを扱うプロジェクトが多いです。
それで「C#」の場合はデータを扱う「LINQ」の「Enumeration」クラスを置き、複雑なアルゴリズムを知らなくてもデータ処理ができるようになっています。
また、Enumerableは関数型プログラムを指向しているし、パラレル処理でも「Enumerable」クラスを利用して処理します。これからの投稿からにも「Enumerable」をよく使うのでここで使用する方法を確かに認知していきましょう。

0 件のコメント