Другой ответ от ponzao хорош, но чтобы ответить на ваш вопрос более конкретно, если вы просто хотите получить наибольшее число (а не индекс), я обычно делаю это:
function max(a)
local values = {}
for k,v in pairs(a) do
values[#values+1] = v
end
table.sort(values) -- automatically sorts lowest to highest
return values[#values]
end
print(max({1, 2, 3, 4, 1, 2, 37, 1, 0})) --> 37
Чтобы продвинуться дальше и включить только часть массива таблицы и отфильтровать только числовые значения (чтобы избежать ошибок), вы можете добавить некоторые проверки типов:
function max(a)
local values = {}
for k,v in pairs(a) do
if type(k) == "number" and type(v) == "number" then
values[#values+1] = v
end
end
table.sort(values) -- automatically sorts lowest to highest
return values[#values]
end
print(max({1, 2, 3, 4, 1, 2, 37, 1, 0})) --> 37
Логика следующая:
- Создать пустую таблицу (массив)
- Перебирать все ключи с помощью пар (ipairs () останавливается на первом nil, как и цикл for с #)
- Добавить каждое значение в массив (после проверки типа во втором блоке кода)
- Сортировать массив по возрастанию
- Возвращает значение последнего элемента (после сортировки оно будет в конце).
Я знаю, что это старый вопрос, поэтому ОП, возможно, в этом больше не нуждается, но эта страница в настоящее время занимает высокое место в Google, поэтому, надеюсь, это поможет кому-то еще, кто наткнется на эту страницу.