📜  百分比随机 c# (1)

📅  最后修改于: 2023-12-03 15:11:21.807000             🧑  作者: Mango

百分比随机 C#

百分比随机是指在指定的范围内,以一定的概率生成一个随机数。在游戏开发、概率统计、数据分析等领域经常会使用到百分比随机。

在 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);

以上就是两种实现百分比随机的方法。有了这两种方法作为基础,你可以根据具体场景自定义百分比阈值数组并调用随机函数,实现更加灵活的随机逻辑。