C# ランダムブール
プログラムでコインを投げなければならない状況に遭遇したことがありますか?2つのデータベース間でランダムに物事を配布したいと思ったことはありませんか?
あなたが達成しようとしていることは、私たちがランダムブールと呼んでいるものです。boolean 変数には、true または false の 2つの可能な値しかありません。
このブール値をランダムに生成すると、ランダムなブール値が得られます。このチュートリアルでは、C# を使用してランダムブール値を作成する方法を示します。
また、それを生成するための最速かつ最も理想的な方法も見ていきます。
C# クラス Random からの Next() メソッドを使用する
C# の Random クラスは、ランダム性の武器を提供します。これは、統計的要件に基づいてランダムシーケンスを生成できる疑似ランダムジェネレーターを提供します。
このクラスは、bytes、integers、および doubles の場合のようにブール値のメソッドを明示的に提供しませんが。しかし、プログラマーの観点からは、false と true は 0 と 1 に他ならないため、効率的に使用してそれらを生成できます。
最初の方法は、Next() メソッドを使用して、n を 2 として割り当て、0 と 1 のみを構成する容量を減らすことにより、[0,n) の範囲のランダムな整数を生成することです。
// Generate n random booleans using C# class Random
using System;
public class RandomBoolean {
public static void Main() {
int n = 5;
var random = new Random();
for (int i = 0; i < n; i++) {
Console.WriteLine(random.Next(2) == 1);
}
}
}
出力:
False
True
True
False
False
// Note this is random and may not match with your actual output
C# クラス Random の NextDouble() メソッドを使用する
前の例で、Next() を使用してランダムなブール値を生成する方法を確認しました。このアプローチでは、同じクラス Random の別のメソッド NextDouble() を使用する方法を説明します。
NextDouble() は、0.0 と 1.0 の間のランダムな double 値を返します。したがって、これら 2つの数値の間の任意の場所に区切り文字を追加し、生成された数値を分離条件に基づいて true または false に分割できます。
たとえば、区切り文字として double 値 0.3 を選択し、分離条件を生成された数値>=0.3 として選択します。したがって、数値が条件を満たす場合は true、それ以外の場合は false になります。
十分にランダムな分布を実現するために、セパレーターの推奨値は 0.5 です。
// Generate n random booleans using C# class Random
using System;
public class RandomBoolean {
public static void Main() {
int n = 5;
var random = new Random();
for (int i = 0; i < n; i++) {
Console.WriteLine(random.NextDouble() >= 0.5);
}
}
}
出力:
True
False
True
True
False
// Note this is random and may not match with your actual output
投稿で説明されている両方の方法は、適度に高速です。
しかし、最速を選択する必要があるとします。その場合、2 番目の方法は短いようです。
メソッド Next() は、NextDouble() による this.Sample() と比較して、内部的に (int)(this.Sample()*maxValue) を返し、乗算とキャストのオーバーヘッドが追加されます。
Harshit Jindal has done his Bachelors in Computer Science Engineering(2021) from DTU. He has always been a problem solver and now turned that into his profession. Currently working at M365 Cloud Security team(Torus) on Cloud Security Services and Datacenter Buildout Automation.
LinkedIn