Как правильно и эффективно перемешать содержимое таблицы? - PullRequest
1 голос
/ 16 марта 2019

Я пытаюсь перемешать содержимое таблицы случайным образом. Он работает нормально, за исключением того, что иногда он не возвращает все содержимое таблицы. Я перед печатью распечатал некоторые ключи на столе, и они вернули ноль, но я не уверен, как это исправить. Вот Луа:

local tab = {1,2,3,4,5,6,7,8,9,10}

function ReturnRandomTable(t)
   local newt = {}
   local i = 1
   repeat
      local rand = math.random(1,#t)
      newt[i] = t[rand]
      print(t[rand]) --sometimes prints nil
      t[rand] = nil
      i = i + 1
   until #t == 0
   return newt
end

table.shuffle = function(t)
   local newt = ReturnRandomTable(t)
   for i = #t,1,-1 do
      t[i] = nil
   end
   return newt
end

local randt = table.shuffle(tab)
for _,v in pairs(randt) do
   print(v)
end

Любая помощь будет оценена!

1 Ответ

0 голосов
/ 16 марта 2019

Решено путем изменения t[rand] = nil на table.remove(t,rand).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...