自分がよくサンプルデータを作成するときのイディオムについて紹介します。
ほとんどLINQの紹介になるかと思いますが。。。
用意するサンプルデータは、0~9の合計10個のintの配列とします。
- 構文
- 個人的に感じるメリット・デメリット
- 使用例
のような感じで書いていきます。
1. for(int i = 0; i < 10; i++){ }
2. Enumerable.Range(0, 10);
1. for(int i = 0; i < 10; i++){ }
これは、大体のプログラミング言語には用意されているfor文での作成方法ですね。
メリット・デメリット
メリットとしては、
- usingディレクティブ(最初にusing System;とか入れる文のこと)が必要ない
- 他のプログラミング言語を知っている人ならとっつきやすい
デメリットとしては、
- LINQに比べると冗長になりやすい
- 配列等のコレクションを先に宣言しておかないといけない
何はともあれ一番ノーマルな感じなサンプルデータの作成方法だと思います。
使用例
int[] collection = new int[10]; for( int i = 0; i < collection.Length; i++){ collection[i] = i; }
2. Enumerable.Range(0, 10);
これを使用するには、ファイルの最初にusing System.Linq;
と using System.Collections.Generic;
のusingディレクティブが必要になります。
メリット・デメリット
メリットとしては、
- サクッと書ける
- Select()やWhere()等の拡張メソッドでさらに複雑なデータを生成できる
- チョットドヤガオデキル?
デメリットとしては、
- LINQという概念を理解しなければいけない
LINQについては学習コストはそれなりにありますがC#を今後も使っていくのであれば、覚えておいて損はないと断言できます。
むしろほかの言語でもその考え方は活用できますので、ぜひLINQを使ってみてください。
使用例
using System.Linq; using System.Collections.Generic; int[] secondColllection = Enumerable.Range(0, 10).ToArray();
自分が一番使用しているイディオムですね。短くて済むのはいいですね。
3つ目もありましたが、ほとんど2番目とかぶっていたので、代わりに別のサンプルデータの作成方法を書いて終わりにしたいと思います。
サンプルデータとしては、
public class SampleData { public int Number { get; set; } public bool Flag { get; set; } public SampleData(int number, bool flag) { this.Number = number; this.Flag = flag; } }
- 上記のSampleDataクラスの配列を5個作成する
// for文を用いた方法 SampleData[] sampleDatas = new SampleData[5]; for (int i = 0; i < sampleDatas.Length; i++) { sampleDatas[i] = new SampleData(i, i % 2 == 0); } // LINQを用いた方法 SampleData[] sampleDatasByLinq = Enumerable.Range(0, 5) .Select(x => new SampleData(x, x % 2 == 0)) .ToArray();
- 上記のSampleDataクラス5個の配列から各1つプロパティをまとめた配列を作成する
// for文を用いた方法 bool[] flags = new bool[5]; for (int i = 0; i < flags.Length; i++) { flags[i] = sampleDatas[i].Flag; } // LINQを用いた方法 bool[] flagsByLinq = sampleDatas.Select(x => x.Flag).ToArray();
- 上記のSampleDataクラス5個から1プロパティがtrueの場合のみ、取得したクラスの配列を作成する
// 5. SampleDataクラス5個から1プロパティがtrueの場合のみ、取得したクラスの配列を作成する // for文を用いた方法 List<SampleData> sampleDatasOnlyTrue = new List<SampleData>(); for (int i = 0; i < sampleDatas.Length; i++) { if (sampleDatas[i].Flag == true) { sampleDatasOnlyTrue.Add(sampleDatas[i]); } } SampleData[] sampOnlyTrue = new SampleData[sampleDatasOnlyTrue.Count]; for (int i = 0; i < sampOnlyTrue.Length; i++) { sampOnlyTrue[i] = sampleDatasOnlyTrue[i]; } // LINQを用いた方法 SampleData[] sampOnlyTrueByLinq = sampleDatas.Where(x => x.Flag).ToArray();
上記のソースは以下のGistに記載しています。
以上です。