Unity中集合的随机数(指定长度—List、Dictionary)

这两个方法分别实现了从Dictionary和List中随机抽取不重复元素的功能。在抽取过程中,它们确保了返回的元素集合不包含重复项,同时限制了抽取的数量不超过原始集合的大小。通过使用Random类生成随机索引,并检查新集合中是否已存在该元素,来避免重复。这两个函数对于需要进行随机采样操作的场景非常实用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

获取Dictionary中不重复的随机数(返回Dictionary):
        public static Dictionary<TKey, TValue> RandomValues<TKey, TValue>(Dictionary<TKey, TValue> allDic, int randomCount)
        {
            System.Random rand = new System.Random();
            Dictionary<TKey, TValue> newDic = new Dictionary<TKey, TValue>();
            int size = allDic.Count;
            randomCount = randomCount > size ? size : randomCount;
            List<TKey> values = Enumerable.ToList(allDic.Keys);
            while (newDic.Count < randomCount)
            {
                TKey tk = values[rand.Next(size)];
                if (!newDic.Keys.Contains(tk))
                {
                    newDic[tk] = allDic[tk];
                }
            }
            return newDic;
        }

获取List中不重复的随机数(返回List): 

 public static List<TKey> RandomValues<TKey>(List<TKey> allList, int randomCount)
        {
            System.Random rand = new System.Random();
            List<TKey> newList = new List<TKey>();
            int size = allList.Count;
            randomCount = randomCount > size ? size : randomCount;
            //List<TKey> values = Enumerable.ToList(allList.Keys);
            while (newList.Count < randomCount)
            {
                TKey tk = allList[rand.Next(size)];
                if (!newList.Contains(tk))
                {
                    newList.Add(tk);
                }
            }
            return newList;
        }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值