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

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

   写不出就翻译老外的。

有两种方法:

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

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

代码如下:

  1. --产生1~~m,若有n的则m~~n的数字表
  2. function table.fillNum(m,n)
  3. local j,k
  4. if n then
  5. j=m
  6. k=n
  7. else
  8. j=
  9. k=m
  10. end
  11.  
  12. local t={}
  13. for i=j,k do
  14. table.insert(t,i)
  15. end
  16. return t
  17.  
  18. end
  19.  
  20. --产生不相同的从mn,一共cnt个随机数表
  21. function math.randomx( m,n,cnt ) --方法1
  22. if cnt>n-m+ then
  23. return {}
  24. end
  25. local t = {}
  26. local tmp = {}
  27. math.randomseed(os.time())
  28. while cnt> do
  29. local x =math.random(m,n)
  30. if not tmp[x] then
  31. t[#t+]=x
  32. tmp[x]=
  33. cnt=cnt-
  34. end
  35. end
  36. return t
  37. end
  38. --同上
  39. function math.randomEx(m,n,cnt) --方法2
  40. if cnt>n-m+ then
  41. return {}
  42. end
  43. local x=
  44. local t={}
  45. local tmp=table.fillNum(m,n)
  46. math.randomseed(os.time())
  47. while cnt> do
  48. x=math.random(,n-m+)
  49. table.insert(t,tmp[x])
  50. table.remove(tmp,x)
  51. cnt=cnt-
  52. m=m+
  53.  
  54. end
  55. return t
  56. end
  57.  
  58. t=math.randomx(, , )
  59. for i=, do
  60. print(t[i])
  61. end
  62. print("...........")
  63. t=math.randomEx(, , )
  64. for i=, do
  65. print(t[i])
  66. end

性能测试:

  1. t1=os.clock()
  2. for i=, do
  3. math.randomEx(,,)
  4. end
  5. t2=os.clock()
  6. for i=, do
  7. math.randomx(,,)
  8. end
  9. t3=os.clock()
  10. 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. eclipse 导入tortoiseSVN检出项目,不显示svn信息(eclipse安装svn插件)

      eclipse 导入tortoiseSVN检出项目,不显示svn信息(eclipse安装svn插件) CreateTime--2018年5月10日14:10:35 Author:Marydon 1 ...

  2. 解决Android 4.0以上版本中OptionsMenu菜单不显示ICON图标的问题

    在Android4.0系统中,创建菜单Menu,通过setIcon方法给菜单添加图标是无效的,图标没有显出来,2.3系统中是可以显示出来的.这个问题的根本原因在于4.0系统中,涉及到菜单的源码类 Me ...

  3. 23、List集合

    1.List List接口是Collection的子接口,用于定义线性表数据结构.List是可重复集 2.List自身定义的方法 List处理继承Collection方法外,自己还定义了其它方法,例如 ...

  4. java Socket Tcp示例三则(服务端处理数据、上传文件)

    示例一: package cn.itcast.net.p5.tcptest; import java.io.BufferedReader;import java.io.IOException;impo ...

  5. HDUOJ---Can you solve this equation?

    Can you solve this equation? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K ( ...

  6. tkinter Canvas画图片大坑总结

    一.ImportError: cannot import name '_imagingtk' 问题描述 使用tkinter画pillow生成的图片时,在tkinter中抛出此异常. 解决方案 pip ...

  7. JavaScript 中定义变量时有无var声明的区别

    关于JavaScript中定义变量时有无var声明的区别 var a=5; //正确 a=5; //正确 在javascript中,以上两种方法都是定义变量的正确方法.微软的Script56.CHM中 ...

  8. 使用WinSCP连接linux

    1.运行WinSCP工具,新建站点,输入主机名.用户名.密码,点击“保存(S)...”按钮 2.点击“确定”按钮,保存站点信息 3.选择左侧列表中的“root@192.168.67.2”这一项,然后点 ...

  9. iOS CPU占有率达到了100%甚至更多,然后导致App闪退

    今天在真机调试的过程中,发现了一个严重的问题,发现CPU的使用率竟然达到了100%,以至于会导致运行内存占用过高,被系统的看门狗机制给杀掉. 下面就讲一讲怎么去定位这个问题: 1.打开Xcode,把项 ...

  10. C# 中一些类关系的判定方法 C#中关于增强类功能的几种方式 Asp.Net Core 轻松学-多线程之取消令牌

    1.  IsAssignableFrom实例方法 判断一个类或者接口是否继承自另一个指定的类或者接口. public interface IAnimal { } public interface ID ...