C# 랜덤 부울
프로그래밍 방식으로 동전을 던져야 하는 상황이 발생했습니까? 두 데이터베이스 간에 무작위로 물건을 배포하고 싶었던 적이 있습니까?
당신이 달성하려고 하는 것은 우리가 random boolean
이라고 부르는 것입니다. boolean
변수에는 true
또는 false
의 두 가지 가능한 값만 있습니다.
이 부울을 무작위로 생성할 때 무작위 부울을 얻습니다. 이 자습서에서는 C#을 사용하여 random boolean
을 만드는 방법을 보여줍니다.
우리는 또한 그것을 생성하는 가장 빠르고 이상적인 방법을 보게 될 것입니다.
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 값을 반환합니다. 따라서 이 두 숫자 사이에 구분 기호를 추가하고 분리 조건에 따라 생성된 숫자를 true
또는 false
로 나눌 수 있습니다.
예를 들어, 이중 값 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
게시물에 설명된 두 가지 방법 모두 상당히 빠릅니다.
그러나 가장 빠른 것을 선택해야 한다고 가정해 봅시다. 이 경우 두 번째 방법이 더 짧아 보입니다.
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