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设计实现自己的负载分配方案.先看看下面这张简单的架构图吧~ 从图上看, ...
随机推荐
- eclipse 导入tortoiseSVN检出项目,不显示svn信息(eclipse安装svn插件)
eclipse 导入tortoiseSVN检出项目,不显示svn信息(eclipse安装svn插件) CreateTime--2018年5月10日14:10:35 Author:Marydon 1 ...
- 解决Android 4.0以上版本中OptionsMenu菜单不显示ICON图标的问题
在Android4.0系统中,创建菜单Menu,通过setIcon方法给菜单添加图标是无效的,图标没有显出来,2.3系统中是可以显示出来的.这个问题的根本原因在于4.0系统中,涉及到菜单的源码类 Me ...
- 23、List集合
1.List List接口是Collection的子接口,用于定义线性表数据结构.List是可重复集 2.List自身定义的方法 List处理继承Collection方法外,自己还定义了其它方法,例如 ...
- java Socket Tcp示例三则(服务端处理数据、上传文件)
示例一: package cn.itcast.net.p5.tcptest; import java.io.BufferedReader;import java.io.IOException;impo ...
- HDUOJ---Can you solve this equation?
Can you solve this equation? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ( ...
- tkinter Canvas画图片大坑总结
一.ImportError: cannot import name '_imagingtk' 问题描述 使用tkinter画pillow生成的图片时,在tkinter中抛出此异常. 解决方案 pip ...
- JavaScript 中定义变量时有无var声明的区别
关于JavaScript中定义变量时有无var声明的区别 var a=5; //正确 a=5; //正确 在javascript中,以上两种方法都是定义变量的正确方法.微软的Script56.CHM中 ...
- 使用WinSCP连接linux
1.运行WinSCP工具,新建站点,输入主机名.用户名.密码,点击“保存(S)...”按钮 2.点击“确定”按钮,保存站点信息 3.选择左侧列表中的“root@192.168.67.2”这一项,然后点 ...
- iOS CPU占有率达到了100%甚至更多,然后导致App闪退
今天在真机调试的过程中,发现了一个严重的问题,发现CPU的使用率竟然达到了100%,以至于会导致运行内存占用过高,被系统的看门狗机制给杀掉. 下面就讲一讲怎么去定位这个问题: 1.打开Xcode,把项 ...
- C# 中一些类关系的判定方法 C#中关于增强类功能的几种方式 Asp.Net Core 轻松学-多线程之取消令牌
1. IsAssignableFrom实例方法 判断一个类或者接口是否继承自另一个指定的类或者接口. public interface IAnimal { } public interface ID ...