(學習)如何从数组中随机取出多个不重复的项

1.问题
如何随机取数组中的多个值?给定一个数组,需要从此数组中 随机 取出 不重复 几项 ;

2.应用举例
从20个会员中,随机抽出5个做为幸运奖;
对于这个应用,一个办法是可以在数据库层面解决,如(sql server):
select top  5  * from  (select top  20  * from userid order by userid desc) as b  order by newid()
可是有时候,我们需要在编程语言中完成这样的功能,而不是从数据库,下边说的就是使用编程语言实现的方法;

3.实现思路
思路一:写一个无限循环,或者数组长度的循环,使用随机函数,每次从数组中随机抽取1项,同时判断此项是否已被抽取,如果被抽取,则继续循环重新抽取,直到取出不重复5项时,跳出循环;
这办法简单吧?但这个办法不太好,如果需求要求从10万个中随机取出1万个,使用此办法,那么将有1/10的概率每次都取出了曾经取出的那项了,于是需要重新再取,效率自然不高。另外,无限循环或循环数组长度次总让人心里觉得不踏实。

思路二:写一个循环,循环次数为要取出的个数,即取几个就刚好循环几次,每取一次,将取出的项从数组中删除,下次循环再取时,保证不会重复,少了是否重复的判断。

4.几种语言的实现代码
这里采用第二种思路,下面有as,js,C#的实现代码。

ActionScript 2.0代码:

View Code 

JavaScript代码,和AS类似: 

View Code 

C#代码: 

View Code 

测试: 

View Code 

转载于:https://www.cnblogs.com/NetPig/archive/2012/01/02/2310275.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值