本篇主要是参考 lua连续随机数 这篇文章完成。大家可以去原贴查看学习。

生成随机数组,暂时发现两种方法

1、把生成的数放到一个表里面,每次随机时判断这个表里是否有,若有再随机一次(问了朋友,很多人都想到这个方法)

2、先生成一个连续的数字表t,每次随机一个数n,把t[n]保存,并移除t[n]

首先,说一下我的真实需求是给定一定范围,然后生成指定个数的不重复随机数组。这个给定范围,可能很大,可能很小,指定个数可能比数组个数大,也可能只比数组个数小一点,也可能比数组个数小很多。

例如,1、从1~100,这100个数内,随机生成10个不重复数字数组。

  2、从1~1000,这1000个数内,随机生成10个不重复数字数组。

  3、从1~15,这15个数内,随机生成10个不重复数字数组。

当需求是例2时,生成方法一没有任何问题。

需求是例1时,生成方法一也凑合没问题。

但是,当需求是例3时,生成方法三的重复概率过高,使得随机次数无限增大(我的机器就直接卡死不动来进行反抗)。

根据需求,于是用生成方法二生成随机数。

下文附上原贴中的代码(我要去吃饭了,自己的代码就先不贴了):

--产生1~~m,若有n的则m~~n的数字表
function table.fillNum(m,n)
local j,k
if n then
j=m
k=n
else
j=
k=m
end local t={}
for i=j,k do
table.insert(t,i)
end
return t end --产生不相同的从m到n,一共cnt个随机数表
function math.randomx( m,n,cnt ) --方法1
if cnt>n-m+ then
return {}
end
local t = {}
local tmp = {}
math.randomseed(os.time())
while cnt> do
local x =math.random(m,n)
if not tmp[x] then
t[#t+]=x
tmp[x]=
cnt=cnt-
end
end
return t
end
--同上 (我对方法2做了修改,以符合自己的需求)
function math.randomEx(m,n,cnt) --方法2
    local tmp=table.fillNum(m,n)
    if cnt>n-m+ then
return tmp
end
local x=
local t={}math.randomseed(os.time())
while cnt> do
x=math.random(,n-m+)
table.insert(t,tmp[x])
table.remove(tmp,x)
cnt=cnt-
m=m+ end
return t
end t=math.randomx(, , )
for i=, do
print(t[i])
end
print("...........")
t=math.randomEx(, , )
for i=, do
print(t[i])
end

Lua在给定范围内,生成指定个数不重复随机数组的更多相关文章

  1. 生成32位UUID及生成指定个数的UUID

    参考地址:https://blog.csdn.net/xinghuo0007/article/details/72868799 UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯 ...

  2. random and password 在Linux下生成crypt加密密码的方法,shell 生成指定范围随机数与随机字符串

    openssl rand -hex n (n is number of characters) LANG=c < /dev/urandom tr -dc _A-Z-a-z-0-9 | head ...

  3. shell 生成指定范围随机数与随机字符串 .

    shell 生成指定范围随机数与随机字符串         分类:             shell              2014-04-22 22:17     20902人阅读     评 ...

  4. Java获取随机数获取制定范围指定个数不重复的随机数

    一.JDK中提供的两种方式 1.Math类中的random()方法public static double random()返回带正号的 double 值,该值大于等于 0.0 且小于 1.0 [0. ...

  5. PHP生成一个不重复随机数组的封装方法

    <?php /** array unique_rand( int $min, int $max, int $num )* 生成一定数量的不重复随机数* $min 和 $max: 指定随机数的范围 ...

  6. (php)生成指定个数的随机红包

    <?php $total=20;//红包总金额 $num=10;// 分成10个红包,支持10人随机领取 $min=0.01;//每个人最少能收到0.01元 $redpack = new red ...

  7. 22. Generate Parentheses生成指定个括号

    生成指定个数的括号,这些括号可以相互包括,但是一对括号的格式不能乱(就是配对的一个括号的左括号要在左边,右括号要在右边) 思维就是从头递归的添加,弄清楚什么时候要添加左括号,什么时候添加右括号 有点像 ...

  8. PHP 生成随机数组

    /** 生成指定个数,以及最小最大值随机数组(包括最大值) * @parem $min 随机数组最小值 * @parem $max 随机数组最大值 * @parem $num 随机数组个数,默认max ...

  9. JS生成指定范围内的随机数(支持随机小数)

    直接需要函数的话,直接到文章的最后面找. ============================================================= 转载:https://www.cn ...

随机推荐

  1. Python模拟C++输出流

    看到一Python例子,挺有意思的,用Python模拟C++的输出流OStream.单纯只是玩. 原理: 利用Python __lshift__左移内建函数<<,调用时将输出内容,如果内容 ...

  2. [f]添加css3动画的方法

    添加css3的一些动画的属性 使用方法: css3(oDiv[0], 'scale', 300)('rotate', 300);css3(oDiv[0], 'animation', '"dd ...

  3. 【转】Fiddler的基本介绍

    转:http://kb.cnblogs.com/page/130367/#basic Fiddler的官方网站:  www.fiddler2.com Fiddler的官方帮助:http://docs. ...

  4. HTTP02--Http请求头及缓存知识

    一.常用工具 Linux下:curl命令,I参数可以查看http head信息. Firefox:Firebug.HttpFox 二.常见Http Head信息 三.浏览器缓存机制 使用ctrl+F5 ...

  5. PHP类与继承

    <?php class Person { private $name; private $age; function __construct($name,$age){ $this->nam ...

  6. 针对httptest4net构建elasticsearch集群压力测试用例

    httptest4net是可以自定义HTTP压力测试的工具,用户可以根据自己的情况编写测试用例加载到httptest4net中并运行测试.由于最近需要对elasticsearch搜索集群进行一个不同情 ...

  7. ASP.NET MVC学习之模型绑定(2)

    3.手工调用模型绑定 很多情况下我们都是通过形参的方式接收来自http流中的数据,这看似是完美的,但是缺少了很多过程中的控制,所以我们就需要使用手工的方式进行绑定.下面我们通过一个例子来说明,首先打开 ...

  8. easyui combobox 中实现 checkbox

    $('#cc').combobox({ url:'combobox_data1.json', method:'get', valueField:'id', textField:'text', pane ...

  9. Nginx学习笔记(一) Nginx架构

    Nginx架构 Nginx全程是什么? Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. ...

  10. [JAVA] 基于TCP的起重机运行模拟器

    1.客户端 package ClientMain; import java.io.DataInputStream; import java.io.DataOutputStream; import ja ...