概率取值模拟算法

有这样一个需求,从一个给定的集合中随机取一个值。集合如下:
int[] seeds = { 1, 2, 3, 4, 5 };
要求:取得的值为1、2、3、4、5的概率分别为 5%、5%、5%、35%、50%

其实可以创建一个集合来模拟这个取值,如下:

List<int> seedList = new List<int>(18)
                          {
                           1,2,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5
                          };

声明的集合中,1、2、3分别占集合总量的5%,4的数量占集合总数的35%,5占集合总数的50%。
再生成一个随机数,使得生成的随机数作为集合的下标,取出集合中的值。
int temp = Random.Range(0, 18);
将temp的值作为集合seedList的索引,取出值,即可获得随机值。完整代码如下所示。

 public int MakeRandom()
    {        int[] seeds = { 1, 2, 3, 4, 5 };

        List<int> seed = new List<int>(18)
                       { 
                         1,2,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5
                       };        
        int temp = Random.Range(0, 18);        
        Debug.Log(seed[temp]);          
        return seed[temp];
    }

欢迎访问我的公众号:分享一些Unity项目中遇到的一些知识,也会与C++数据结构和算法相关的知识分享。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值