Lua中沒有數(shù)組,但是可以通過表(table)來模擬數(shù)組,為了便于理解,本文的所有對(duì)表的操作都稱為數(shù)組,值得注意的是,Lua數(shù)組下標(biāo)是從1開始,而不是0。
1.Lua之產(chǎn)生若干個(gè)指定范圍的不重復(fù)的隨機(jī)數(shù)
先直接上代碼
function getNRandom(startNum, endNum, number, exceptTable) -- 一個(gè)產(chǎn)生不重復(fù)隨機(jī)數(shù)的方法
local cha = endNum - startNum + 1
if cha< number then
print("產(chǎn)生的個(gè)數(shù)已經(jīng)超過了,檢查你的隨機(jī)數(shù)范圍和個(gè)數(shù)是否合理")
return
end
local numberTabel = {}
local num = 0
local isExist = false -- 用這個(gè)判斷是否已經(jīng)存在這個(gè)數(shù)了
local i = 0
while (i < number) do
isExist = false
local randomNum = math.random(startNum, endNum)
print("產(chǎn)生的隨機(jī)數(shù)為:", randomNum)
local function isExisting() -- 檢測(cè)數(shù)組里面是否已經(jīng)存在了這個(gè)隨機(jī)數(shù)了,有就返回true
if #numberTabel ~= 0 then
for k, v in pairs(numberTabel) do
if randomNum == v then
print("發(fā)現(xiàn)產(chǎn)生了一個(gè)相同的隨機(jī)數(shù),所以不能再加到那里面去了")
return true
end
end
end
if #exceptTable ~= 0 then
for k, v in pairs(exceptTable) do
if randomNum == v then
print("發(fā)現(xiàn)產(chǎn)生了一個(gè)已經(jīng)點(diǎn)過的隨機(jī)數(shù),要除開,不能要")
return true
end
end
end
end
isExist = isExisting()
if isExist then -- 如果已經(jīng)存在了這個(gè)數(shù),那么久返回,并且要把i-1
else
table.insert(numberTabel, randomNum)
i = i + 1
end
end
return numberTabel
end
參數(shù)依順序分別為:最小的數(shù),最大的數(shù),產(chǎn)生的數(shù)的個(gè)數(shù),要排除的數(shù)的數(shù)組(表)。
如果你傳入的數(shù)范圍不對(duì),比如你傳入最小為1,最大為10,你非要產(chǎn)生15個(gè)不同的隨機(jī)數(shù),那就是不可能的,所以這里在最前面就判斷,當(dāng)范圍不對(duì)的時(shí)候就返回。
2.Lua之刪除指定下標(biāo)的數(shù)組(table)中的元素
如果是刪除你知道的某一個(gè)index的元素,那當(dāng)然簡(jiǎn)單了用table.remove()方法即可,但是這里我知道下標(biāo)也是一個(gè)數(shù)組形式的,比如有某一個(gè)數(shù)組為tabel1 = {1, 3, 5, 7, 9},我想刪除的下標(biāo)的數(shù)組為removeIndexTable = {3, 5, 2}得到一個(gè)新的數(shù)組