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设计实现自己的负载分配方案.先看看下面这张简单的架构图吧~ 从图上看, ...
随机推荐
- 【基于Android的ARM汇编语言系列】之三:ARM汇编语言程序结构
作者:郭嘉 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell [ ...
- Eclipse debug模式 总是进入processWorkerExit
Eclipse debug模式 总是进入processWorkerExit CreateTime--2018年3月9日15:44:59 Author:Marydon 请移步至文章:http://w ...
- org.apache.commons.lang.StringUtils中isEmpty和isBlank的区别
public static boolean isEmpty(String str) 判断某字符串是否为空,为空的标准是str==null或str.length()==0 StringUtils.isE ...
- python学习笔记之基础数据和控制
注释: 单行注释 # 多行注释''' ''' 注意:当注释中有汉字时需要在python文件的第一行添加如下内容之一:#coding:gbk或#coding:utf-8或##-*- coding ...
- Linux 系统sudo命令
Linux系统中有许多的系统命令和服务为了安全性考虑,因此只有root超级用户才可以去使用.如果普通用户需要做此类操作,则可以使用su - 命令(减号(-)指完全切换到新的用户,即把环境变量信息也变更 ...
- Apache-一个IP多个主机域名
#配置虚拟主机名 NameVirtualHost 192.168.209.128 <VirtualHost 192.168.209.128> DocumentRoot /htdocs/wi ...
- jsp中获取当前项目名称
在JSP页面获取当前项目名称的方法: 方法1: <%= this.getServletContext().getContextPath() %> 方法2: 使用EL表达式 ${pageCo ...
- windows平台下压缩tar.gz
windows平台下很多压缩软件(如360压缩)都支持tar.gz的解压,但不支持压缩 推荐一款支持tar.gz压缩的软件7zip 下面介绍可视化和命令行两种操作方式将文件压缩为tar.gz 可视化操 ...
- TScrollBox响应鼠标滚轮问题
Delphi的TScrollBox本身并不响应鼠标滚轮事件(不知道为什么),但可以在ScrollBox的鼠标滚动事件中进行控制: procedure TfrmTaskNoteEdit.ScrollBo ...
- EditPlus集成Java编译和运行命令组建轻量级Java SE开发工具
http://www.gogogogo.me/development/EditPlus-Java.html