Я думаю, что вопрос также нуждается в более общем ответе. Не существует ограничений на создание таблиц lua с последовательностью целых чисел, начиная с 1. Ключи могут быть действительно любыми - они могут даже быть другими таблицами lua! В таких случаях такие функции, как #myTable, могут дать ответ, которого вы не ожидаете (при использовании без какой-либо настраиваемой метатабельной функции). Единственный надежный способ получить все ключи в таблице - это выполнить итерацию по ней:
-- iterate over whole table to get all keys
local keyset = {}
for k in pairs(myTable) do
table.insert(keyset, k)
end
-- now you can reliably return a random key
random_elem = myTable[keyset[math.random(#keyset)]]
Я также добавлю, что исходное решение Michal Kottman будет отлично работать, если все ваши ключи представляют собой последовательность чисел, начиная с 1. Это происходит всякий раз, когда вы создаете таблицу как myTable = {'a','b','c'}
. Так что в ситуациях, когда таблицы построены таким образом, получение случайных элементов из таблицы будет быстрее.