Lua中没有数组,但是可以通过表(table)来模拟数组,为了便于理解,本文的所有对表的操作都称为数组,值得注意的是,Lua数组下标是从1开始,而不是0。
1.Lua之产生若干个指定范围的不重复的随机数
先直接上代码
function getNRandom(startNum, endNum, number, exceptTable) -- 一个产生不重复随机数的方法
local cha = endNum - startNum + 1
if cha< number then
print("产生的个数已经超过了,检查你的随机数范围和个数是否合理")
return
end
local numberTabel = {}
local num = 0
local isExist = false -- 用这个判断是否已经存在这个数了
local i = 0
while (i < number) do
isExist = false
local randomNum = math.random(startNum, endNum)
print("产生的随机数为:", randomNum)
local function isExisting() -- 检测数组里面是否已经存在了这个随机数了,有就返回true
if #numberTabel ~= 0 then
for k, v in pairs(numberTabel) do
if randomNum == v then
print("发现产生了一个相同的随机数,所以不能再加到那里面去了")
return true
end
end
end
if #exceptTable ~= 0 then
for k, v in pairs(exceptTable) do
if randomNum == v then
print("发现产生了一个已经点过的随机数,要除开,不能要")
return true
end
end
end
end
isExist = isExisting()
if isExist then -- 如果已经存在了这个数,那么久返回,并且要把i-1
else
table.insert(numberTabel, randomNum)
i = i + 1
end
end
return numberTabel
end
参数依顺序分别为:最小的数,最大的数,产生的数的个数,要排除的数的数组(表)。
如果你传入的数范围不对,比如你传入最小为1,最大为10,你非要产生15个不同的随机数,那就是不可能的,所以这里在最前面就判断,当范围不对的时候就返回。
2.Lua之删除指定下标的数组(table)中的元素
如果是删除你知道的某一个index的元素,那当然简单了用table.remove()方法即可,但是这里我知道下标也是一个数组形式的,比如有某一个数组为tabel1 = {1, 3, 5, 7, 9},我想删除的下标的数组为removeIndexTable = {3, 5, 2}得到一个新的数组
网友评论