連番配列
C#で連番の配列がほしいとき、以下のような書き方で要素を指定するのは面倒です。
int[] ary = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
要素数が20にもなればいちいち書いてられませんし、かといってループで要素を入れていくのもスマートではありません。ワンラインでスマートに書き上げてしまいたいところです。
連番配列の生成方法
int[] ary1 = Enumerable.Range(0, 10).ToArray();
// 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
Enumerable.Range メソッドは、連番の初期値と要素数を引数にとり、IEnumerable
引数で指定するのは、連番の初期値と要素数(≠終了値)なので、(0, 10)を指定すると、0から10個の連番なので、0~9となります。
その他の型の連番配列(doubleやfloat)
Enumerable.Range メソッドは、int型しか返せませんが、以下のようにすることで double型に変換して取得できます。同様にfloat型などでも取得可能です。
double[] ary = Enumerable.Range(0, 10).Select(n => (double)n).ToArray();
// 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
全要素同値の配列
上の例では連番で配列を生成しましたが、すべて同じ値で生成することも可能です。Enumerable.Repeat<T>メソッドを使用します。引数には値と要素数を指定します。
int[] ones = Enumerable.Repeat<int>(1, 10).ToArray();
// 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
上のコードは全要素1で初期化した例です。型を指定できるので例えばstring型でも構いません。
string[] ary = Enumerable.Repeat<string>("ABC", 3).ToArray();
// "ABC", "ABC", "ABC"
まとめ
using System;
using System.Linq;
class Program
{
static void Main()
{
// 連番配列
int[] ary1 = Enumerable.Range(0, 10).ToArray();
double[] ary2 = Enumerable.Range(0, 10).Select(n => (double)n).ToArray();
// 同値の配列
int[] ary3 = Enumerable.Repeat<int>(1, 3).ToArray();
string[] ary4 = Enumerable.Repeat<string>("ABC", 3).ToArray();
}
}
コメントを書く