C#ライブラリリファレンス - データの集合を射影(選択)する
Enumerable静的クラスを使用すれば、データの射影(選択)を容易に行えます。射影を使えれば、短く理解しやすいプログラムで、複数のデータを扱う事が可能となります。
日常でたとえると
大量にあるファイルから受注金額だけを取り出す。
使用に適した状況
複数のデータに対して、何らかの処理をしたい場合。特に複数のプロパティを持つオブジェクトに対して使用すると、必要なプロパティの値だけ取り出せるので便利です。
サンプル
/*----------------------------------------------------
*
* データの集合を射影(選択)する
*
----------------------------------------------------*/
using System;
using System.Linq;
class Sample
{
static void Main( )
{
//データソースを用意
int max = 10;
int[ ] values = new int[ max ];
for ( int i = 0 ; i < max ; ++i )
values[ i ] = i;
Console.WriteLine( "データ" );
foreach ( int v in values )
Console.Write( "{0} ", v );
Console.WriteLine( Environment.NewLine );
//データを射影
Console.WriteLine( "データを射影します・・・" );
var results = values.Select(
( int x ) => x * 10 );
foreach ( var r in results )
Console.Write( "{0} ", r);
Console.WriteLine( Environment.NewLine );
//クエリ式でデータを射影
Console.WriteLine( "クエリ式を使用します・・・" );
var results1 = from v in values
select v * 10;
foreach ( var r1 in results1 )
Console.Write( "{0} ", r1 );
Console.WriteLine( Environment.NewLine );
//終了
Console.WriteLine( "サンプル終了。" );
Console.ReadLine();
}
}
名前空間
System.Linq名前空間を参照してください。
解説
個々のインスタンスを処理するのではなく、複数のインスタンスに対して処理をする、プログラミングの考え方を、集合指向プログラミングと呼びます。集合指向プログラミングを行えれば、冗長になりがちな処理や、複雑な処理を一度に処理することが可能となります。
この記事で紹介しているSelect拡張メソッドは、集合指向プログラミングの中で、最も基礎的と呼べるものであり、データの要素を選ぶだけです。それ故に、有難味が分かり難いと思います。しかしながら、集合指向プログラミングの要素は、Select拡張メソッドだけではなく、複数の要素を組み合わせて使用するので、実際に使用するときは単体で使用しません。Select拡張メソッドの真価は、他の要素と組み合わせて使用したときに発揮されます。また、データを選んで加工するだけでも意外と便利です。
Select拡張メソッドそのものは、たいしたことがないように見えますが、先ほど言ったように、集合指向プログラミングは、複数の要素を駆使して行うものですが、個々の要素を理解しなくては習得できません。C#を使いこなしたいならば、集合指向プログラミングは必須知識です。色々試しSelect拡張メソッドの動作をよく覚えておきましょう。
なお、Select拡張メソッドは、Enumerable静的クラスで定義されています。C#はクエリ式と拡張メソッドの構文があるので、あまり覚える必要はありませんが、深い理解をするためには必要な知識です。頭の片隅において下さい。