在List里面随机取一个值很简单,只要生成一个随机数在0到List的数量区间,然后取这个下标的值就行了。但是如果List里面的每个值都有一个取值概率,那该怎么得到呢?
/// <summary>
/// 从指定的概率池中挑选一个概率值,并将其索引返回
/// </summary>
/// <param name="probabilities">概率池</param>
/// <returns></returns>
public static int GetProbability(float[] probabilities) {
var total = 0f;
var count = probabilities.Length;
// 首先计算出概率的总值,用来计算随机范围
for (var i = 0; i < count; i++) {
total += probabilities[i];
}
var nob = Random.Range(0f, total);
for (var i = 0; i < count; i++) {
if (nob < probabilities[i]) {
return i;
}
nob -= probabilities[i];
}
return count - 1;
}
|