2013-03-25から1日間の記事一覧

group by句によるグループ化

プログラミングC# 第6版 8.3.4 データをグループごとにまとめます。以下実行例 using System; using System.Linq; class Foo { public int id; public string name; } class Program { static void Main() { Foo[] fooList = new Foo[] { new Foo() { id = 2…

Concat演算子による連結

プログラミングC# 第6版 8.3.3 データ同士を連結します。以下実行例 using System; using System.Linq; class Program { static void Main() { int[] nums1 = new int[] { 1,2,3 }; int[] nums2 = new int[] { 5,6,7 }; var ret = nums1.Concat(nums2); fore…

orderby句

プログラミングC# 第6版 8.3.2 ソートされたデータを返します。以下実行例 using System; using System.Linq; class Foo { public int id; public string name; } class Program { static void Main() { Foo[] fooList = new Foo[] { new Foo() { id = 5 , n…

OfTypeフィルタ演算子

プログラミングC# 第6版 8.3.1 OfTypeは指定した型のオブジェクトだけを抽出するフィルタです。以下実行例。 using System; using System.Linq; class Foo { public int fooId; } class Bar { public int barId; } class Program { static void Main() { obj…

LINQは遅延実行

プログラミングC# 第6版 8.2.3 クエリ式で得た値は、実際にforeach等でループするまではまだ実行されてない状態とのこと。というわけで動作確認。 using System; using System.Linq; using System.Collections.Generic; class Program { static IEnumerable<int> </int>…

let句

プログラミングC# 第6版 8.1.3 クエリ式の中で使用できる一時変数を定義するためのものです。まずはlet句を使わなかった場合の処理を見てみましょう。 using System; using System.Linq; // 数値チェッククラス class CheckNum { private int _num; public i…

LINQ演算子の独自実装

プログラミングC# 第6版 8.1.2 WhereやSelectを拡張メソッドに頼らずに独自に実装することでクエリ式として扱うことができます。 using System; using System.Linq; class Foo { public int id; public Foo Where (Func<Foo, bool> predicate) { return this; } public </foo,>…

初めてのLINQ

プログラミングC# 第6版 8.1 LINQです。クエリ式とも言うみたいです。一見すると何がなんだか良くわからない感じに見えますが、今までのC#の知識で十分読み解けそうです。ということでまずは一番シンプルなクエリ式の構文を見てみましょう。 using System; u…

反復処理の実装とyield文

C#

プログラミングC# 第6版 7.3.1.1 反復処理を独自に実装することが可能とのこと。これは説明が難しいので実装を見た方がわかりやすいかと思います。 using System; using System.Collections.Generic; class Program { static void Main() { foreach(int i in…

例外処理

C#

プログラミングC# 第6版 6.3.1 C#における例外処理のお話。C++にもありましたね。まずは基本の実装例です。 using System; class Program { static void Main() { try { Foo(); } catch(Exception e) { Console.WriteLine("catch実行:"+e); } finally { Con…

0除算の結果定数

C#

プログラミングC# 第6版 飛ばしていた例外の章について見ていきます。double型の0で0除算をすると以下のような出力が得られます。 using System; class Program { static void Main() { double i = 0.0; Console.WriteLine(0.0/i); Console.WriteLine(1.0/i)…

集約用Aggregate演算子

プログラミングC# 第6版 8.3.9 要素を全て使用して単一の値を返すための演算子です。例えば要素数を返すCount演算子や、全ての要素の合計値を計算するSumなどがそれにあたります。 using System; using System.Linq; class Program { static void Main() { i…

AnyやAllメソッドによる要素のチェック

プログラミングC# 第6版 8.3.8 Anyメソッドを使うことで、ある条件に合う要素が一つでも存在しているかどうかのチェックを行うことができます。 using System; using System.Linq; class Program { static void Main() { int[] nums1 = new int[] {1,3,5,7};…

全体から一部を取り出す

プログラミングC# 第6版 8.3.7 全部は必要なくて例えば先頭から3件だけ処理したいとかいう場合にTakeメソッドを使います。 using System; using System.Linq; class Program { static void Main() { int[] nums = new int[] {1,2,3,4,5,6,7}; // 先頭から3件…

Zipメソッドによるマージ処理

プログラミングC# 第6版 8.3.6 二つのデータを一つのデータにまとめます。Concatのように結合するのではなく、同じ要素で一まとめにするといった感じです。まぁ文章より実装を見た方が早いですね。 using System; using System.Linq; class Program { static…

Selectメソッドで添え字を得る

プログラミングC# 第6版 8.3.5.3 Selectメソッドを使い、反復処理中の添え字を得る。以下実装例 using System; using System.Linq; class Program { static void Main() { string[] strs = new string[] {"foo","bar","baz"}; // ラムダ式の第二引数に添え字…

複数のデータソースを使用する

プログラミングC# 第6版 8.3.5.2 複数のデータソースを処理する。fromをつなげて処理する感じですね。 using System; using System.Linq; class Program { static void Main() { int[][] nums = new int[][] { new int[]{1,2,3}, new int[]{10,20,30}, new i…

selectに匿名型を利用する

プログラミングC# 第6版 8.3.5 selectで取ってくるデータとして匿名型を利用する。匿名型は以前習いましたね。 using System; using System.Linq; class Program { static void Main() { int[] nums = new int[] { 1,2,3,4,5 }; // selectに匿名型を利用 var…