zoukankan      html  css  js  c++  java
  • (學習)如何从数组中随机取出多个不重复的项

    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 

  • 相关阅读:
    一个测试HTML Method的例子
    eXtplorer:在线管理网站文件的利器
    PHPXref:PHP文件交叉引用工具
    统计MySQL数据库大小
    PHP函数glob()
    PclZip:PHP压缩与解压缩
    PHP发送有附件的电子邮件[转]
    查找表中的主键
    CentOS6.4简单配置Cobar
    CentOS6.4 安装mysql cmake的参数说明
  • 原文地址:https://www.cnblogs.com/NetPig/p/2310275.html
Copyright © 2011-2022 走看看