从给定数字集合中随机取不重复的数字算法

游戏开发过程中,会遇到比如:从给定的10个道具中随机生成三个给用户,要求生成的道具相互之间不重复。一般情况下,我们会将道具存储在一个集合中,然后生成一个随机数,使用生成的随机数作为集合的索引,从集合中取出对象,传递给实例化函数。这样做有一个缺点,生成的随机数是不定的,多次生成的随机数之间,可能会出现值重复,为了避免这种情况,使用下面的方法来生成随机数。

private int[] CreateRandomNumber () {
        List<int> nums = new List<int> ();        
        for (int i = 1; i <= 5; i++) {
            nums.Add (i);
        }       
        for (int i = 0; i < 2; i++) {           
            int j = Random.Range (0, 4);
            nums.Remove (nums[j]);
        }        
        return nums.ToArray();
    }

一、创建需要生成数字的种子库
二、生成一个随机值作为数组的索引,根据生成的索引访问数组
三、按照索引,将生成的随机值从数组中移除,返回剩余数组的值,即可得到三个不同的值

测试如下:

 int[] temp = CreateRandomNumber ();

    for (int i = 0; i < 3; i++)
    {
            Debug.Log (temp[i]);
    }
欢迎访问我的公众号:分享一些Unity项目中遇到的一些知识,也会与C++数据结构和算法相关的知识分享。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值