- 浏览: 30827 次
最新评论
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的概率每次都取出了曾经取出的那项了,于是需要重新再取,效率自然不高。另外,无限循环或循环数组长度次总让人心里觉得不踏实。
思路二:写一个循环,循环次数为要取出的个数,即取几个就刚好循环几次,每取一次,将取出的项从数组中删除,下次循环再取时,保证不会重复,少了是否重复的判断。
//从一个给定的数组arr中,随机返回num个不重复项 function getArrayItems(arr:Array, num:Number):Array { //新建一个数组,将传入的数组复制过来,用于运算,而不要直接操作传入的数组; var temp_array:Array = new Array(); for (var index in arr) { temp_array.push(arr[index]); } //取出的数值项,保存在此数组 var return_array:Array = new Array(); for (var i = 0; i<num; i++) { //判断如果数组还有可以取出的元素,以防下标越界 if (temp_array.length>0) { //在数组中产生一个随机索引 var arrIndex:Number = Math.floor(Math.random()*temp_array.length); //将此随机索引的对应的数组元素值复制出来 return_array[i] = temp_array[arrIndex]; //然后删掉此索引的数组元素,这时候temp_array变为新的数组 temp_array.splice(arrIndex, 1); } else { //数组中数据项取完后,退出循环,比如数组本来只有10项,但要求取出20项. break; } } return return_array; } //测试 var my_array:Array = new Array(); for (var i = 0; i<20; i++) { my_array[i] = "Num:"+i; } my_array = getArrayItems(my_array, 5); for (var i = 0; i<my_array.length; i++) { trace(my_array[i]); }
发表评论
-
async-threading 让flex支持多线程(转)
2014-07-17 16:57 725开源项目async-threading能使as3支持多线程, ... -
Flex 多图片压缩上传
2014-07-10 15:04 818转自:http://my.oschina.net/eats ... -
Flex AMF Upload Demo
2013-05-05 20:44 887java端:写一个名为ZhuaTuSerlvet的Serl ... -
FXG Test
2012-12-17 23:52 644<?xml version="1.0&q ... -
My Flex Skin
2012-11-23 08:58 87My Flex Skin -
Flex中的DataGrid的内容处理(总结)
2012-11-08 10:59 7471.介绍一下DataGrid中数据的增加/删除/获取。添加/删 ... -
flex DataGrid 表头分组
2012-11-05 08:46 931<mx:AdvancedDataGrid id ... -
AS3分享:FLEX开发者必备的十多个工具
2012-11-01 00:07 617http://as3.aa-a.net/index.php/a ... -
AS3研究TextField心得
2012-10-31 23:41 1551AS3研究TextField心得这两天自己做了texti ... -
Flex efflex 开源库
2012-10-31 00:00 596http://www.efflex.org/FlexEffec ... -
Flex 字体 消除锯齿相关
2012-10-30 23:34 15021. Adobe 官方: 控制 ... -
Flex实用工具
2012-10-26 08:43 57Flex实用工具 -
Flex使用module加载swf,部分组件样式丢失
2012-10-24 15:44 743flex使用module加载swf,部分组件样式丢失(da ... -
My calendar
2012-10-22 14:21 574My calendar design -
使用ObjectUtil来遍历flex as Object对象的所有属性
2012-10-12 10:48 707遍历或者复制一个as 对象所有的属性,可以模仿java使用反射 ... -
AS3 Copy 对象
2012-10-12 10:46 703第一种:public static function clon ... -
AS3 深复制
2012-10-12 10:44 71913.11 深度拷贝一个ArrayCo ... -
flex mvc 架构图
2012-09-25 15:12 628flex mvc 架构图 -
Parsley API
2012-08-16 08:40 727Parsley API -
随机取数组里的值
2012-08-14 17:11 827怎样随机读取数组中的一个值(两种方法) 方法一: var ...
相关推荐
本文章向码农介绍php从一个不重复的数组中随机的取出若干个不同的元素,难点是防止在取数的时候出现已经取到过的情况(特别是取到最后),需要尽可能的降低碰撞,需要的朋友可以参考下
方法一 思路:首先创建一个1到3000的数组,每次取一个数,然后去除数组中取出的这个数, 这样就可以实现永不重复。 代码如下: [removed] var count=3000; var originalArray=new Array;//原数组 //给原数组original...
4、一条语句中声明多个变量 var 变量名1=值,变量名2=值,变量名3; 3、变量名命名规范 1、由字母,数字,下划线以及 $ 组成 var user_name; 正确 var user-name; 错误 var $uname; 正确 2、不能以数字开头 ...
本文主要介绍了PHP基于自增数据生成不重复的随机数的相关内容,分享出来供大家参考学习,下面多说无益 直接上代码: 关键点在于生成的自增数据位数控制 位数控制在于两个地方 1、 $base 基数组 如果是8位这个...
书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预处理器等各个方面的主题,并分别给出了解答,而且结合代码示例阐明要点。 《你必须知道的495个C语言问题》结构...
实例137 从数组中随机取出元素 165 实例138 合并数组 166 实例139 拆分数组 167 实例140 遍历数组 168 2.11 日期和时间 169 实例141 设置系统的当前时间 169 实例142 将日期和时间转换为时间戳 170 实例143 获取系统...
实例137 从数组中随机取出元素 165 实例138 合并数组 166 实例139 拆分数组 167 实例140 遍历数组 168 2.11 日期和时间 169 实例141 设置系统的当前时间 169 实例142 将日期和时间转换为时间戳 170 实例143 获取系统...
然后又使用一些内存分配技巧使namestr数组用起来好像有多个元素,namelen记录了元素个数。它是怎样工作的?这样是合法的和可移植的吗? 2.8 我听说结构可以赋给变量也可以对函数传入和传出。为什么K&R1却明确说明...
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其...
4. 一:随机生成不重复数字字符串 5.方法二:随机生成字符串(数字和字母混和) 6.从字符串里随机得到,规定个数的字符串. 复制代码 22.条形码 BarCodeToHTML 本类是个条码生成类,大家可根据需要自己设置,非常...
取汉字拼音的首字母,只要你输入一个汉字,或者是多个汉字就会取出相应的道字母,主要是方便查询使用的 复制代码 16.配置文件操作类 ConfigHelper 1.根据Key取Value值 2.根据Key修改Value 3.添加新的Key ,Value...
参数 随机渐变, 逻辑型, 可空, 不选不随机颜色 .参数 字体抖动, 逻辑型, 可空 .子程序 查看字节集1, 文本型, 公开, 以易语言文本方式查看字节集,返回文本内容 如:{ 102, 204, 14, 5 } .参数 字节集, 字节集, , 欲...
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的...再保存、如何从文件中得到公钥编码的字节数组、如何从字节数组解码公钥...
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的...再保存、如何从文件中得到公钥编码的字节数组、如何从字节数组解码公钥...
8、修正“时间_时间戳转文本”代码不严谨出现数组错误的BUG,感谢易友[455275321]反馈。 MD5:3E66BFA15806DEAFBCF11806EB99CC11 精易模块 V5.13 what’s new:(20150202) 1、修正“编码_ansi到usc2”当末尾出现10...
在目前的CP, SP, NP中, CP可以同时加入多个频道, 而NP也可以有多个资源, 为了描述 这种结构, 引入了图的概念. 每个边(Edge)存储了指向NP的指针, 指向Channel的指针, 在TS中还需要存储这一Session在这一Channel中的...
在目前的CP, SP, NP中, CP可以同时加入多个频道, 而NP也可以有多个资源, 为了描述 这种结构, 引入了图的概念. 每个边(Edge)存储了指向NP的指针, 指向Channel的指针, 在TS中还需要存储这一Session在这一Channel中的...