lua连续随机数
号外:惭愧,工作后几乎没有写博客了,其实是有时间的(每周单休),只是厌烦对着屏幕了,还有懒。
现在老板换人了,时间会多点,估计正常就每周双休了,决定还是每周写两篇(不一定是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连续随机数的更多相关文章
- lua 中随机数产生
需要用到两个函数: (1)math.randomseed(N): 接收一个整数N作为随机序列种子 (2)math.random([n, [m]]): 这个函数有三种用法,分别是不跟参数,此时产生(0 ...
- Lua在给定范围内,生成指定个数不重复随机数组
本篇主要是参考 lua连续随机数 这篇文章完成.大家可以去原贴查看学习. 生成随机数组,暂时发现两种方法 1.把生成的数放到一个表里面,每次随机时判断这个表里是否有,若有再随机一次(问了朋友,很多人都 ...
- lua中的随机数
Lua 生成随机数需要用到两个函数:math.randomseed(xx), math.random([n [, m]]) 1. math.randomseed(n) 接收一个整数 n 作为随机序列种 ...
- lua常用操作
1 .Lua生成随机数: Lua 生成随机数需要用到两个函数:math.randomseed(xx), math.random([n [, m]]) 1. math.randomseed(n) 接收一 ...
- Redis学习-LUA脚本
最近在做K线的项目中,需要计算商品的分时数据.为了保证多台机器对同一商品的计算的有序性,所以在Redis中进行计算,同时为了保证在分时数据计算过程的原子性所以使用了LUA脚本,Redis内置了对LUA ...
- 高性能伪事务之Lua in Redis
EVAL简介 Redis2.6加入了对Lua脚本的支持.Lua脚本可以被用来扩展Redis的功能,并提供更好的性能. 在<Redis拾遗>中曾经引用了<Redis in Action ...
- Lua 随机数生成问题
原文链接:http://blog.csdn.net/zhangxaochen/article/details/8095007 Lua 生成随机数需要用到两个函数: math.randomseed(xx ...
- Redis Lua 脚本使用
本文转载自Redis Lua 脚本使用 Lua 简介 Lua语言提供了如下几种数据类型:booleans(布尔).numbers(数值).strings(字符串).tables(表格). 下面是一些 ...
- openresty使用笔记(一)
背景介绍 游戏经过一段时间的运营,发现了原来的设计缺陷太多,所以决定重新设计架构.使用到nginx作为核心并通过lua+redis设计实现自己的负载分配方案.先看看下面这张简单的架构图吧~ 从图上看, ...
随机推荐
- Phpcms没有找到网址列表
今天在搞phpcms的采集遇到了这个问题. 没有找到网址列表,请先进行网址采集. 百度,google了好久: 网上答案: 方案1 1.尝试清除 v9_collection_history 表里的内容 ...
- js中移除空白节点
//移除空白节点,空白节点的类型是3 function removeWhiteNode(node) { for (var i = 0; i < node.childNodes.lengt ...
- 【Oracle】迁移含有BLOG类型的字段的表
日常数据库迁移过程中,发现dmp文件中的表,如果表含有blog类型的字段,无法进行迁移. 以下是我迁移含有blog类型字段表的经验分享' 使用PLSQL Developer进行导出 接着选择需要导出的 ...
- python 2.7疑难问题之 编码
#http://www.cnblogs.com/bluescorpio/p/4303656.html •在遇到错误提示时,注意查看错误提示内容,同时注意查看type类型. 1.TypeError: d ...
- C语言第一个例子hello world
1.用文本编辑器编辑代码如下,然后保存为hello.c文件 #include <stdio.h> int main(void){ printf("hello world" ...
- 通过jdbc使用PreparedStatement,提升性能,防止sql注入
为什么要使用PreparedStatement? 一.通过PreparedStatement提升性能 Statement主要用于执行静态SQL语句,即内容固定不变的SQL语句.Statement每执行 ...
- samba温故知新
SAMBA服务器可以实现Windows主机和Linux主机共享资源互访的功能,即在Windows下可以通过网上邻居访问Linux操作系统中SAMBA服务器共享的文件夹,当然,Linux操作系统之间同样 ...
- bootstrap之UpdateStrings
UpdateStrings package io.appium.android.bootstrap.handler; import io.appium.android.bootstrap.Androi ...
- Ubuntu14.04 mount远程服务器上的目录
备忘用. 一,远程服务器设置: 1,在/etc/exports中添加如下配置: /home/xxx *(insecure,rw,sync,no_root_squash,anonuid=123,anon ...
- HDUOJ---1754 I Hate It (线段树之单点更新查区间最大值)
I Hate It Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...