[C#] 連番配列と全要素同値の配列の初期化方法

[C#] 連番配列と全要素同値の配列の初期化方法

連番配列

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型を返します。これを ToArray メソッドで配列にしてやることで連番配列の簡単な生成が可能です。

引数で指定するのは、連番の初期値と要素数(≠終了値)なので、(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();
    }
}

C#カテゴリの最新記事