号外:惭愧,工作后几乎没有写博客了,其实是有时间的(每周单休),只是厌烦对着屏幕了,还有懒。

   现在老板换人了,时间会多点,估计正常就每周双休了,决定还是每周写两篇(不一定是love2d),

   写不出就翻译老外的。

有两种方法:

1、把生成的数放到一个表里面,每次随机时判断这个表里是否有,若有再随机一次

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

代码如下:

--产生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
--同上
function math.randomEx(m,n,cnt) --方法2
if cnt>n-m+ then
return {}
end
local x=
local t={}
local tmp=table.fillNum(m,n)
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

性能测试:

t1=os.clock()
for i=, do
math.randomEx(,,)
end
t2=os.clock()
for i=, do
math.randomx(,,)
end
t3=os.clock()
print((t3-t2)-(t2-t1))

两种方法差别不是很大,而且当在10000后再加2个0时,就需要很长时间了,或者挂掉。

如果需要在相隔较短的时间内生成相差较大的随机数可以把math.randomseed(os.time())

替换为math.randomseed(tostring(os.time()):reverse():sub(1, 6))。

因为在相隔较短时间时os.time()相差不大,reverse可以把字符串倒转,这样就相差大了,详见此文

lua连续随机数的更多相关文章

  1. lua 中随机数产生

    需要用到两个函数: (1)math.randomseed(N):  接收一个整数N作为随机序列种子 (2)math.random([n, [m]]): 这个函数有三种用法,分别是不跟参数,此时产生(0 ...

  2. Lua在给定范围内,生成指定个数不重复随机数组

    本篇主要是参考 lua连续随机数 这篇文章完成.大家可以去原贴查看学习. 生成随机数组,暂时发现两种方法 1.把生成的数放到一个表里面,每次随机时判断这个表里是否有,若有再随机一次(问了朋友,很多人都 ...

  3. lua中的随机数

    Lua 生成随机数需要用到两个函数:math.randomseed(xx), math.random([n [, m]]) 1. math.randomseed(n) 接收一个整数 n 作为随机序列种 ...

  4. lua常用操作

    1 .Lua生成随机数: Lua 生成随机数需要用到两个函数:math.randomseed(xx), math.random([n [, m]]) 1. math.randomseed(n) 接收一 ...

  5. Redis学习-LUA脚本

    最近在做K线的项目中,需要计算商品的分时数据.为了保证多台机器对同一商品的计算的有序性,所以在Redis中进行计算,同时为了保证在分时数据计算过程的原子性所以使用了LUA脚本,Redis内置了对LUA ...

  6. 高性能伪事务之Lua in Redis

    EVAL简介 Redis2.6加入了对Lua脚本的支持.Lua脚本可以被用来扩展Redis的功能,并提供更好的性能. 在<Redis拾遗>中曾经引用了<Redis in Action ...

  7. Lua 随机数生成问题

    原文链接:http://blog.csdn.net/zhangxaochen/article/details/8095007 Lua 生成随机数需要用到两个函数: math.randomseed(xx ...

  8. Redis Lua 脚本使用

    本文转载自Redis Lua 脚本使用 Lua 简介 Lua语言提供了如下几种数据类型:booleans(布尔).numbers(数值).strings(字符串).tables(表格). 下面是一些 ...

  9. openresty使用笔记(一)

    背景介绍 游戏经过一段时间的运营,发现了原来的设计缺陷太多,所以决定重新设计架构.使用到nginx作为核心并通过lua+redis设计实现自己的负载分配方案.先看看下面这张简单的架构图吧~ 从图上看, ...

随机推荐

  1. 【java读书笔记】JSTL,高速精通

    JSTL并非什么新颖的技术并且非常easy,甚至有人觉得JSTL已经过时了.可是我觉得它既然存在,就有存在的道理.作为技术人员就应该知道它们是什么,怎么使用,有什么长处. JSTL包括两部分:标签库和 ...

  2. 算法笔记_127:蓝桥杯2017模拟赛-本科组习题解答(Java)

     目录 1 算年龄 2 猜算式 3 排列序数 4 字符串比较 5 还款计算 6 滑动解锁 7 风险度量   PS:以下代码部分仅供参考,若有不当之处,还请路过同学指出哦~ 1 算年龄 标题:算年龄 英 ...

  3. java 类名.class、object.getClass()和Class.forName()的区别 精析

        1.介绍 getClass()介绍 java是面向对象语言,即万物皆对象,所有的对象都直接或间接继承自Object类: Object类中有getClass()方法,通过这个方法就可以获得一个实 ...

  4. 【laravel5.4】查询构造器对象与模型instance的互相换换

    1.查询构造器一般情况下返回对象,但是无法直接使用model类的一些方法,如toJson.toArray等 DB::table 结果转换成 model 类实例[collect 实例] public f ...

  5. ASP.NET#在设计窗口上添加了一个SqlDataSource控件后,没有显示出来?

    在设计窗口上添加了一个SqlDataSource控件后,没有显示出来,但后台代码是有的 处理的办法:菜单栏->视图->可视辅助->ASP.NET非可视控件 (我用的是VS2012)

  6. 获取网站资源 getResourceAsStream

    获取网站资源(重点) public void doGet(HttpServletRequest request, HttpServletResponse response)throws Servlet ...

  7. xml 引入约束文件

    <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" ...

  8. JAVA常见异常解析

    1. java.lang.nullpointerexception 这个异常大家肯定都经常遇到,异常的解释是"程序遇上了空指针",简单地说就是调用了未经初始化的对象或者是不存在的对 ...

  9. Pandas中DataFrame修改列名

    Pandas中DataFrame修改列名:使用 rename df = pd.read_csv('I:/Papers/consumer/codeandpaper/TmallData/result01- ...

  10. Qt WebView改造成 QML App

    这是去年的一个项目,虽然研究出来了,解了一时之需,但随后束之高阁.当时Qt的版本是4.8.现在整理如下: 把QT HTML5 APP改造成 QML App 方案 新建一个QML自定义控件,该控件包含Q ...