📅  最后修改于: 2023-12-03 15:11:21.807000             🧑  作者: Mango
百分比随机是指在指定的范围内,以一定的概率生成一个随机数。在游戏开发、概率统计、数据分析等领域经常会使用到百分比随机。
在 C# 中,实现百分比随机可以用 Random 类来生成随机数,再与给定的百分比阈值进行比较。本文将介绍两种实现方法。
使用这种方法,需要预先计算出每个百分比阈值对应的随机概率,然后使用 Random.NextDouble() 生成一个 0 到 1 之间的随机值,将随机值与每个概率值进行比较,最终得出对应的百分比。
public static int RandomPercentageComparison(double[] percentages)
{
if (percentages == null || percentages.Length == 0)
{
throw new ArgumentException("Invalid parameters");
}
double randomValue = new Random().NextDouble();
for (int i = 0; i < percentages.Length; i++)
{
if (randomValue < percentages[i])
{
return i;
}
randomValue -= percentages[i];
}
// 如果所有概率之和小于1,则有可能会没有任何一个概率被选中,此时可以随机返回一个下标
return new Random().Next(0, percentages.Length);
}
上面的代码使用了一个 double 类型的数组,存储了每个百分比阈值对应的随机概率。使用 Random.NextDouble() 生成一个 0 到 1 之间的随机数 randomValue,然后遍历数组,将 randomValue 与每个概率进行比较。如果 randomValue 小于当前概率,则返回对应的下标 i;否则将 randomValue 减去当前概率的值,继续遍历其他概率。如果所有概率之和小于 1,则有可能没有任何一个概率被选中,此时可以随机返回一个下标。
使用该方法,可以实现根据百分比随机选出一个元素:
double[] percentages = { 0.3, 0.5, 0.2 };
int selectedIndex = RandomPercentageComparison(percentages);
这种方法使用 Random.Next() 方法生成一个随机数,再通过除法计算出百分比值。为了保证随机性,我们需要对生成的随机数进行取余操作,即将随机数限定在指定的范围内。
public static int RandomPercentage(double percentage)
{
if (percentage < 0 || percentage > 100)
{
throw new ArgumentException("Invalid parameter");
}
int randomValue = new Random().Next(0, 100);
if (randomValue < percentage)
{
return 1;
}
return 0;
}
上面的代码使用了一个 double 类型的 percentage 参数,代表了百分比阈值。在方法体中,使用 Random.Next() 方法生成一个 0 到 99 之间的随机数 randomValue,如果该随机数小于 percentage,则返回 1,否则返回 0。
使用该方法,可以实现根据百分比随机选出一个元素:
int selectedIndex = RandomPercentage(50);
以上就是两种实现百分比随机的方法。有了这两种方法作为基础,你可以根据具体场景自定义百分比阈值数组并调用随机函数,实现更加灵活的随机逻辑。