Получить индекс значения в таблице, в которой уже есть ключ (выбрать случайную пару ключ / значение) - PullRequest
1 голос
/ 07 ноября 2019

Я хочу выбрать случайную пару ключ / значение из таблицы, но использование math.random() не работает.

--intialises randomization
math.randomseed(os.time()+30) --sets a random seed based on the time
math.random(); math.random(); math.random(); --clears presets

local phrases = {
["a"] = 3
["b"] = 7
["d"] = 4
["f"] = 8
["p"] = 5
}

local phrase = phrases[math.random(1,5)]

phrase всегда будет выводиться как nil. Есть ли способ получить индекс для использования с math.random() или альтернативный метод, который я мог бы использовать?

1 Ответ

1 голос
/ 07 ноября 2019

math.random(1, 5) возвращает числа от 1 до 5. Ваши ключи являются строками.

Вы можете создать таблицу (как в: массив - целочисленные ключи), получить оттуда случайный ключ и затем получить доступ к phrases:

local phrases = {
  ["a"] = 3,
  ["b"] = 7,
  ["d"] = 4,
  ["f"] = 8,
  ["p"] = 5
}

local keys = {}

for k in pairs(phrases) do
  table.insert(keys, k)
end

local random_key = keys[math.random(1,5)] -- One of: "a", "b", "d", "f", "p"
local phrase = phrases[random_key] -- One of: 3, 7, 4, 8, 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...