めんどくさがり屋のために

LINQ用に用意された標準の拡張メソッドは普通に使っても結構便利。
Pythonの組み込み関数の知識も貧弱だったので,あわせて勉強してみた。メモりんこ。

>>> map( lambda x: pow( 2, x ), data )
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]
List<int> data = new List<int>{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
//List<int> result = new List<int>();
//data.ForEach(
//    (x) => result.Add( (int)Math.Pow( 2, x ) ) );
var result = data.Select( (x => (int)Math.Pow( 2, x )) ).ToList();

result.ForEach( Console.WriteLine );


お次はフィルタ。

>>> filter( lambda x: (x % 2) == 0, data )
[0, 2, 4, 6, 8, 10]
var result = data.Where( (x => (x % 2) == 0) ).ToList();
//var result =
//    ( from x in data
//      where (x % 2) == 0
//      select x ).ToList();

result.ForEach( Console.WriteLine );


Pythonのset型というものを初めて知りました・・・
# 以下は和集合と積集合のサンプル

>>> data1 = set( [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] )
>>> data2 = set( [5,20,65,3,1,0] )
>>> data1.union( data2 )
set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 65])
>>> data1.intersection( data2 )
set([5, 3, 1, 0])
List<int> data1 = new List<int> { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
List<int> data2 = new List<int> { 5, 20, 65, 3, 1, 0 };

var result1 = data1.Union( data2 ).ToList();
result1.ForEach( Console.WriteLine );

Console.WriteLine();

var result2 = data1.Intersect( data2 ).ToList();
result2.ForEach( Console.WriteLine );


最終要素の取得

data[ -1 ]
Console.WriteLine( data.Last() );


生成してたもれ。

>>> range( 50 )
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]
var sequence = Enumerable.Range( 0, 50 );
sequence.ToList().ForEach( Console.WriteLine );

C#を使ったプログラミング入門的な授業があって「これらのデータの平均値を求めなさい」という課題が出た場合,
これからの時代(?)は
var result = data.Average();
と書いて提出しましょう!!
ちなみに僕は去年のJavaの授業の「ソートして出力しろ!」という課題でsortメソッドを使って提出したことが(^^ *1
# 以後,課題のプリントに「※自分で実装すること」と書かれてしまった。 ライブラリの存在意義って何?!><

*1:その時点で授業で扱っていたソートアルゴリズムは1つであったためか,「○○ソートアルゴリズムを使え!」と明示的には書かれていなかった。 ので,何でも良いのだなと思ったのじゃ。