https://kan-kikuchi.hatenablog.com/entry/ProbabilityCalclator
↑こちらのサイトを参考にして、確率計算のコードを書こうとしています。
このサイトでは、真偽を確率で判定するコードと、複数の中から確率で1つを抽出するコードを紹介していますが、今回僕は後者の方を真似ようとしています。
こちらのサイトでは
/// <summary> /// 入力したDictから一つを決定し、そのDictのkeyを返す /// </summary> public static T DetermineFromDict<T>(Dictionary<T, int> targetDict){ Dictionary<T, float> targetFloatDict = new Dictionary<T, float>(); foreach (KeyValuePair<T, int> pair in targetDict) { targetFloatDict.Add(pair.Key, (float)pair.Value); } return DetermineFromDict (targetFloatDict); } /// <summary> /// 確率とその対象をまとめたDictを入力しその中から一つを決定、対象を返す /// </summary> public static T DetermineFromDict<T>(Dictionary<T, float> targetDict){ //累計確率 float totalPer = 0; foreach (float per in targetDict.Values) { totalPer += per; } //0〜累計確率の間で乱数を作成 float rand = Random.Range (0, totalPer); //乱数から各確率を引いていき、0未満になったら終了 foreach (KeyValuePair<T, float> pair in targetDict) { rand -= pair.Value; if(rand <= 0){ return pair.Key; } } //エラー、ここに来た時はプログラムが間違っている Debug.LogError ("抽選ができませんでした"); return new L
と書くことで確率計算の処理をして、その後に
//複数の中から確率で一つを選択 //ProbabilityCalclator.DetermineFromDict //Dictionary<対象, 確率>でDictを作成し、入力する。確率はint or float Dictionary<Color, int> colorPerDict = new Dictionary<Color, int> () { {Color.red, 25}, {Color.green, 15}, {Color.blue, 60} }; //RGBから一色選ぶ、確率はそれぞれ25%,15%,60% Color color = ProbabilityCalclator.DetermineFromDict<Color> (colorPerDict);
と書くことで、実際に複数あるもの中から指定した確率で1つを抽出できると書いてあります。
今回僕は、int型の変数を確率で決めるようにしたいです。
具体的にはint型の変数を、
93%の確率で
Hoge = 1
7%の確率で
Hoge = 2
となるようにしたいです。
このサイトの例では、Colorを確率で決めるコードが書かれていますが、Colorではなくint型の変数を確率で決めたい場合、どういう書き方をすればできるのかわかりません。
int型の変数を確率で決めるコードの例を、どなたか教えてください。
回答2件
あなたの回答
tips
プレビュー