隨機取n個不相同的元素(Lua實現)

一些邏輯邏輯需求要在一個長度爲m數組中取出n個不同的元素(m > n),一般第一想法是隨機出一個下標,然後刪除對應的元素,以此來取出不同的元素。本篇文章介紹一個不需要刪除操作的方法。代碼如下:

-- 假設長度m爲10,隨機取出個數爲n=3
local table = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
local count = 3
local length = #table
for i = 1, count do
    local ri = math.random(i, length)
    local tmp = table[i]
    table[i] = table[ri]
    table[ri] = tmp
end
-- table中前3個元素就是要取出的三個元素

實現思路:第一次循環在1-m中隨機一個下標ri,然後將下標1和ri交換,第二次循環在2-m中隨機一個下標ri,將ri和2進行交換,最後table中前三個元素就是隨機出來的元素。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章