Archive

Archive for 1月, 2012

イベント駆動で組み合わせを列挙する

組み合わせの列挙を行いたいということはしばしば起こります。例えば 0, 1, 2, 3, 4 の 5 つの数字から 3 つを取り出す組み合わせというのは {0, 1, 2}, {0, 1, 3}, {0, 1, 4}, {0, 2, 3}, {0, 2, 4}, {0, 3, 4}, {1, 2, 3}, {1, 2, 4}, {1, 3, 4}, {2, 3, 4} の 10 通りあります。普通に書く場合は『Using Combinations to Improve Your Software Test Case Generation』のように書けばよいのですが,ここではあえてイベントを利用して書いてみたいと思います。

Read more...

プログラミング

C# で enum を扱うメソッドってどう書くべきなのだろう

C# の enum を扱うメソッドをジェネリックに書きたいと思うと,ジェネリック型制約に enum が使えないという問題に直面します[a]。何通りか書き方が考えらます。これを,フラグの列挙型の値を与えると,フラグを分解して返すメソッド DecomposeFlag を書きながら考えて見ます。

[Flags]
enum Flag { None = 0, A = 1, B = 2, C = 3, D = 4, E = 5 }

// DecomposeFlag(Flag.None) -> { Flag.None }
// DecomposeFlag(Flag.A) -> { Flag.A }
// DecomposeFlag(Flag.C) -> { Flag.A, Flags.B }
// DecomposeFlag(Flag.C | Flag.E) -> { Flag.A, Flag.B, Flags.D }
// DecomposeFlag(Flag.None | Flag.E) -> { Flag.A, Flags.D }

Read more...

脚注

  1. delegate もそうですね。 []

プログラミング, 雑感 ,