技術資料: C#で乱数の配列を生成する方法

概要

C#では、乱数を生成するためにRandomクラスを使用します。この資料では、基本的な乱数の配列生成から、重複しない乱数の生成までの実装方法を解説します。


1. 基本的な乱数の配列を生成する

コード例

using System;

class Program
{
    static void Main()
    {
        int arraySize = 10; // 配列のサイズ
        int minValue = 1;   // 乱数の最小値
        int maxValue = 100; // 乱数の最大値(最大値は含まない)

        // Randomインスタンスの作成
        Random random = new Random();

        // 配列を作成して乱数で埋める
        int[] randomNumbers = new int[arraySize];
        for (int i = 0; i < arraySize; i++)
        {
            randomNumbers[i] = random.Next(minValue, maxValue);
        }

        // 配列の内容を表示
        Console.WriteLine("乱数の配列:");
        Console.WriteLine(string.Join(", ", randomNumbers));
    }
}

解説

  1. Random クラス
    • Random クラスは擬似乱数を生成します。
    • random.Next(int minValue, int maxValue) を使用して、指定した範囲の乱数を生成します。
    • minValue: 生成される乱数の最小値
    • maxValue: 生成される乱数の最大値(最大値は含まれない)
  2. 配列の作成
    • 配列を宣言し、forループを使って各要素を乱数で初期化します。
  3. 配列の内容を表示
    • string.Join を使用して配列の内容をカンマ区切りで表示します。

2. 重複しない乱数の配列を生成する

重複しない乱数を生成するには、LINQを活用します。

コード例

using System;
using System.Linq;

class Program
{
    static void Main()
    {
        int arraySize = 10; // 配列のサイズ
        int minValue = 1;   // 乱数の最小値
        int maxValue = 100; // 乱数の最大値

        // 重複しない乱数の配列を生成
        int[] uniqueRandomNumbers = Enumerable.Range(minValue, maxValue - minValue)
                                              .OrderBy(x => Guid.NewGuid()) // シャッフル
                                              .Take(arraySize)              // 必要な数だけ取得
                                              .ToArray();

        // 配列の内容を表示
        Console.WriteLine("重複しない乱数の配列:");
        Console.WriteLine(string.Join(", ", uniqueRandomNumbers));
    }
}

解説

  1. Enumerable.Range
    • 指定した範囲内の整数を生成します。
    • minValue から maxValue - 1 までの連続した数値が生成されます。
  2. OrderBy(x => Guid.NewGuid())
    • 各要素に一意の値を割り当てることでランダムな順序にシャッフルします。
  3. Take(arraySize)
    • 必要な数だけ要素を取得します。
  4. 重複のない特性
    • 範囲からランダムに要素を取得するため、重複が発生しません。

3. 応用例

乱数の小数点数を生成する

整数ではなく小数を生成したい場合は、Random.NextDouble() を使用します。

using System;

class Program
{
    static void Main()
    {
        int arraySize = 10; // 配列のサイズ
        double minValue = 1.0; // 最小値
        double maxValue = 10.0; // 最大値

        Random random = new Random();
        double[] randomDoubles = new double[arraySize];

        for (int i = 0; i < arraySize; i++)
        {
            randomDoubles[i] = minValue + (maxValue - minValue) * random.NextDouble();
        }

        Console.WriteLine("乱数の小数点配列:");
        Console.WriteLine(string.Join(", ", randomDoubles));
    }
}

解説

  • Random.NextDouble() は、0.0以上1.0未満のランダムな小数を生成します。
  • 必要な範囲にスケーリングするために (maxValue - minValue) を掛け、minValue を加えます。

まとめ

C#で乱数を使った配列を生成するには、Random クラスを基本として様々な方法があります。要件に応じて、重複しない配列や小数点の乱数配列を生成できます。これを応用することで、ゲームやアプリケーションの幅広いシナリオで利用可能です。

C#,乱数

Posted by hidepon