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 

  • 相关阅读:
    迭代器设计模式
    python中的turtle库绘制图形
    Tesseract-OCR4.0识别中文与训练字库实例
    java图片处理
    Tess4J OCR简单使用教程
    C++ 排列最优解算法思想
    Swing使用JavaFXweb组件
    java专业术语
    java的分数类
    System Rules 更好的测试
  • 原文地址:https://www.cnblogs.com/NetPig/p/2310275.html
Copyright © 2011-2022 走看看