Lua一些簡(jiǎn)單的對(duì)數(shù)組(table)的操作和封裝

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ù)組

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第5章 引用類型(返回首頁(yè)) 本章內(nèi)容 使用對(duì)象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,679評(píng)論 0 4
  • 她壽辰那天,衛(wèi)莊連日趕回韓國(guó)。 手底下的人不知他為何這樣急,但也明了他不喜別人干涉他太多,只當(dāng)是有事未完。 ...
    我家仙女閱讀 713評(píng)論 0 0
  • 俗話說:亂世出英雄。三國(guó)亂戰(zhàn),桃園三結(jié)義、曹操、孔明等萬世流傳。理論物理初創(chuàng)時(shí)的一張學(xué)術(shù)會(huì)議合影照上,居里夫人、愛...
    張永勝_永往直前閱讀 362評(píng)論 0 2

友情鏈接更多精彩內(nèi)容