Библиотека math | Библиотека table |
---|---|
Модуль special | Модуль table |
Модуль random | Модуль NDArray |
Модуль dict |
Модуль dict
Описание модуля dict
dict это удобный и расширяемый модуль для работы со таблицами как словарями на языке Lua. Модуль предоставляет объектно-ориентированный интерфейс, который инкапсулирует операции над таблицами, делая код более структурированным, читаемым и поддерживаемым. При этом централизованное управление операциями над словарем облегчает процесс отладки и отслеживания изменений в данных.
Хотя подобное возможно реализовать in-situ и напрямую работать с таблицами, абстракция, предоставляемая библиотекой, способствует более эффективной разработке, снижает риск ошибок и облегчает сопровождение и масштабирование проектов.
- Создание словаря:
local my_dict = dict()
- Добавление или обновление элементов:
my_dict:set("newKey", "newValue")
- Удаление элементов легко и безопасно удаляет элемент по заданному ключу.:
my_dict:remove("key1")
- Проверка наличия ключа позволяет проверить, существует ли определённый ключ в словаре.:
if my_dict:has("key2") then
-- действия
end
- Получение значения по ключу:
local value = my_dict:get("key2")
- Итерация по элементам позволяет удобно перебрать все пары ключ-значение в словаре:
my_dict:each(function(key, value) print(key, value) end)
- Получение списка ключей или значений:
local keys = my_dict:keys()
local values = my_dict:values()
- Определение размера словаря:
local count = my_dict:size()
- Очистка словаря полностью очищает словарь от всех элементов:
my_dict:clear()
Программный интерфейс (API) модуля dict
---@class dict
---@field create fun(self:dict)
---@field set fun(self:dict, key:number|string, item:any):void
---@field remove fun(self:dict, key:number|string):void
---@field has fun(self:dict, key:number|string):boolean
---@field get fun(self:dict, key:number|string):any
---@field each fun(self:dict, callback:fun(key:number|string, value:any)): void
---@field keys fun(self:dict): table
---@field values fun(self:dict): table
---@field size fun(self:dict): number
---@field clear fun(self:dict): void
dict = dict or {}
Реализация
модуль dict (release 27.09.2024)
do
---@class dict
---@field create fun(self:dict)
---@field set fun(self:dict, key:number|string, item:any):void
---@field remove fun(self:dict, key:number|string):void
---@field has fun(self:dict, key:number|string):boolean
---@field get fun(self:dict, key:number|string):any
---@field each fun(self:dict, callback:fun(key:number|string, value:any)): void
---@field keys fun(self:dict): table
---@field values fun(self:dict): table
---@field size fun(self:dict): number
---@field clear fun(self:dict): void
dict = dict or {}
---set
---@param key number|string
---@param item any
function dict:set(key, item)
self.data[key] = item
end
---remove
---@param key number|string
function dict:remove(key)
self.data[key] = nil
end
---has
---@param key number|string
function dict:has(key)
return self.data[key] ~= nil
end
---get
---@param key number|string
---@return any
function dict:get(key)
return self.data[key]
end
-- Итератор
---@param callback fun(key:number|string, value:any)
function dict:each(callback)
for key, value in pairs(self.data) do
callback(key, value)
end
end
-- Получение ключей
---@return table
function dict:keys()
local keys = {}
for key in pairs(self.data) do
table.insert(keys, key)
end
return keys
end
-- Получение значений
---@return table
function dict:values()
local values = {}
for _, value in pairs(self.data) do
table.insert(values, value)
end
return values
end
-- Размер словаря
---@return number
function dict:size()
local count = 0
for _ in pairs(self.data) do
count = count + 1
end
return count
end
-- Очистка словаря
function dict:clear()
for key in pairs(self.data) do
self.data[key] = nil
end
end
dict.__meta = {
__index = dict
}
---create
---@param tbl table|nil
---@return dict
function dict:create(tbl)
local obj = {
data = tbl or {}
} ---@type dict
return setmetatable(obj, self.__meta)
end
local dict_meta = {
__call = dict.create
}
setmetatable(dict, dict_meta)
end
Заключение
Данный репозиторий я создал в основном для себя но ресурс с желанием поделиться наработками. Надеюсь на фидбек. Было бы интересно узнать о полезности данного репозитория для комьюнити. Может есть уже готовые работы, которые можно непосредственно внедрить в warcraft 3. Также было бы интересно узнать какие функции стоило бы еще внедрить в свою библиотеку.
Полезные источники
- [1] - cheapack совсем не дешевый упаковщик *.lua файлов в *.wct файл Warcraft 3.
- [2] IMP пакетный менеджер lua.
- [3] imp-lua-mm менеджер модулей (imp mm).
- [4] xlua это база функций расширяющих стандартный набор.
- [5] MDTable класс мульти таблиц lua с синхронизацией pairs для онлайна в warcraft 3.
- [6] статья про то какие бывают алгоритмы пуассоновского распределения и какие используются в какой мат. системе.
- [luaforwindows] репозиторий хранящий Lua.exe файл для windows.