18/05/31 21:24:38.84 afJ9Cg6n.net
>>29
ごめん、言葉だけだとよくわからん。
もし29に書いてあるようなことを俺がやるとすると、こんな感じかなぁ。。。
(C#失礼)
static T SelectByRandom<T>(Dictionary<T, int> dic) {
//荷重合計までの乱数を発生
int n = MyRandom(dic.Sum(x => x.Value));
//乱数に応じたオブジェクト選択
foreach(var kv in dic) {
if ((n -= kv.Value) < 0) {
//選択
return kv.Key;
}
}
throw new Exception();//エラー
}
実際はDictionary使わないし、関数化もしないけど、とりあえずイメージで。
ループ回して乱数値に応じた選択をするのが、俺的に定番。
コンパイラ通してないのでエラーでるかもw
呼び出し方はこんな感じ
//準備
var weightDic = new Dictionary<MyClass, int>();
weightDic[objA] = 30;//30の確率でobjAを選択
weightDic[objB] = 90;//90の確率でobjBを選択
weightDic[objC] = 40;//40の確率でobjCを選択
//選択そして実行
var selectedObject = SelectByRandom<MyClass>(weightDic);