Перейти к содержанию

Активность

Лента обновляется автоматически

  1. Последняя неделя
  2. На странице создания нового атома нет кнопки для форматирования кода, хотя она есть в Lua dev
  3. Ещё раньше
  4. Для этого достаточно пройтись в цикле по всем элементам local keys={} for key in pairs(t) do table.insert(keys, key) end После этого в таблице keys будут ключи из таблицы t
  5. Приветствую! Подскажите как получить список ключей из таблицы lua. Заполняю так local t = {} t[1]='первое значение' t[2]='второе значение' t[3]='третье значение' Хочу получить на выходе вторую таблицу: {1,2,3}
  6. Работа с большими таблицами требует внимательного отношения к методам доступа и управления данными, так как это может существенно влиять на производительность и потребление памяти. Вот несколько стратегий для оптимизации: Предварительное выделение памяти: Lua динамически расширяет таблицы по мере добавления новых элементов, что может быть дорогостоящим. Если вы знаете предполагаемый размер таблицы, можно заранее выделить нужное количество памяти. -- Создаем таблицу с заранее выделенным размером local t = {} for i = 1, 1000 do t[i] = 0 end Использование массивоподобных таблиц: Доступ к элементам массивоподобных таблиц (последовательные числовые индексы) быстрее, чем доступ к сложным таблицам с разреженными индексами или строками в качестве ключей. -- Пример массивоподобной таблицы local arr = {1, 2, 3, 4, 5} Применение метатаблиц для кастомизированного поведения: Метатаблицы могут использоваться для перехвата операций, таких как доступ к элементам или их модификация. Это может улучшить производительность за счет оптимизации стандартных операций. local mt = { __index = function(table, key) -- Обработка отсутствующих элементов return 0 end } local t = {} setmetatable(t, mt) Избегание частого создания и удаления таблиц: Постоянное создание и удаление таблиц может привести к фрагментации памяти. Вместо этого старайтесь переиспользовать таблицы. local pool = {} for i = 1, 100 do pool[#pool + 1] = {} -- Предварительное создание пула таблиц end -- Получаем таблицу из пула local function getTable() return table.remove(pool, #pool) end -- Возвращаем таблицу в пул local function returnTable(t) table.insert(pool, t) end Использование специализированных структур данных: Если задача требует специфических операций с данными, попробуйте использовать специальные структуры данных, такие как связные списки или бинарные деревья, вместо стандартных таблиц. Периодическая очистка таблиц: Частицы данных в таблицах, которые больше не нужны, должны удаляться как можно скорее, чтобы освободить память. local t = {1, 2, 3, 4, 5} for i = #t, 1, -1 do if t[i] == 3 then table.remove(t, i) end end Оптимизация работы с таблицами в Lua требует тщательного анализа конкретной задачи и сценариев использования. Использование перечисленных методов в зависимости от контекста поможет уменьшить потребление памяти и повысить производительность кода.
  7. Здравствуйте! Часто работаю с большими объемами данных в таблицах луа. Хотелось бы услышать рекомендации по оптимизации памяти и скорости работы. Заранее спасибо
  8. В lua индексация таблиц начинается с единицы. Попробуйте так: local t = {100} print(t[1])
  9. Написал следующий код local t = {100} print(t[0]) Но выводит почему-то nil. Подскажите в чем проблема
  10. Существует множество способов для решения вашей задачи. Будем опираться на использование Lua внутри Vikingo Engine. Способ через json: local json = require"json" local t = {a=100, b={c=200}} print(json.encode(t)) Способ через inspect: local inspect = require"inspect" local t = {a=100, b={c=200}} print(inspect(t)) Некоторые примеры из интернета на чистом Lua: #1 function tprint(t, s) for k, v in pairs(t) do local kfmt = '["' .. tostring(k) .. '"]' if type(k) ~= "string" then kfmt = "[" .. k .. "]" end local vfmt = '"' .. tostring(v) .. '"' if type(v) == "table" then tprint(v, s or "" .. kfmt) else if type(v) ~= "string" then vfmt = tostring(v) end print(type(t)..(s or '')..kfmt..' = '..vfmt) end end end local t = {a = 100, b = {c = 200}} print(tprint(t)) #2 function dump_table(o) if type(o) == "table" then local s = "{ " for k, v in pairs(o) do if type(k) ~= "number" then k = '"' .. k .. '"' end s = s .. "[" .. k .. "] = " .. dump_table(v) .. "," end return s .. "} " else return tostring(o) end end local t = {a = 100, b = {c = 200}} print(dump_table(t))
  11. Приветствую! Начал работать с таблицами в lua. Подскажите, как вывести все элементы таблицы. Таблица многомерная. Спасибо!
  12. Если вы используете Vikingo Engine, то там можно использовать функцию split из пакета strings: local strings = require("strings") local s = "a,b" local elements = strings.split(s, ",") for _, element in pairs(elements) do print(element) end Ссылка на документацию по пакету https://vikingo.org/ru/engine/docs/lua-api/strings
  13. Как быстро разделить строку на массив подстрок, например: s = "a,b" Хочу на выходе получить таблицу, в которой каждый символ это отдельный элемент таблицы такого вида: {"a","b"}
  14. Для этого можно написать функцию на чистом lua: local charset = "abcdefghijklmnopqrstuvwxyz1234567890" function string.random(length) if length > 0 then return string.random(length - 1) .. charset:sub(math.random(1, #charset), 1) else return "" end end print (string.random(10)) В engine есть встроенная функция random_string, которая входит в пакет utils.
  15. Для моей задачи нужно генерировать строку из заданного алфавита. Пишу код в engine. Пока не получилось, покажите пример.
  16. Запустили русскоязычный канал и группу в телеграме. Там будем публиковать новости о нашем софте, важные изменения и анонсы. В группе можно пообщаться на разные темы. Ссылка на канал: https://t.me/vkngpub Ссылка на группу: https://t.me/vkngru
  17. Для этого можно воспользоваться встроенной функцией tonumber Пример: local s = "100" print(type(s)) local num = tonumber(s) print(type(num))
  18. Здравствуйте. Вопрос по lua. Есть переменная типа строка s s = "100" Как превратить её в число?
  1. Загрузить ещё активность
×
×
  • Создать...