Как вызывать
Functions.collections.spairs(t, order)
Запишите его как зависимость с именем Functions.collections.spairs (принятие автодополнения делает это само) и вызывайте по этому имени.
Что делает
Создать итератор по отсортированному снимку ключей таблицы. По умолчанию сравниваются ключи; пользовательский обратный вызов порядка получает исходную таблицу и два ключа. Значения читаются из исходной таблицы в момент выдачи каждого ключа. Старый итератор заканчивается, когда следующий захваченный ключ равен nil или false.
Аргументы
| Имя | Тип | Что делает |
|---|---|---|
t | table | Обходимая таблица; без пользовательского порядка ключи должны быть взаимно сравнимы. |
order | function | nil | Необязательный обратный вызов порядка, вызываемый как order(t, leftKey, rightKey). |
Возвращает
| 1 | function | Итератор, выдающий захваченный ключ и его текущее значение в таблице, или ничего, когда ключи закончились. |
|---|
Издания
Встроенные помощники регистрируются во всех изданиях. Различается игровой API, который они читают; если нужного API нет, помощник использует запасной вариант или возвращает nil с причиной.
Не читает игровой API напрямую.
Пример
local stacks = { Frost = 2, Arcane = 1, Fire = 3 }
local byCount = function(t, a, b) return t[a] > t[b] end
for school in Functions.collections.spairs(stacks, byCount) do
return school == "Fire"
end
return falseИсходный код
Functions/collections.lua, строка 38. В игре только для чтения; «Дублировать» создаёт редактируемую копию.
Functions.collections.spairs(t, order)
-- collect the keys
local keys = {}
for k in pairs(t) do keys[#keys+1] = k end
-- if order function given, sort by it by passing the table and keys a, b,
-- otherwise just sort the keys
if order then
table.sort(keys, function(a,b) return order(t, a, b) end)
else
table.sort(keys)
end
-- return the iterator function
local i = 0
return function()
i = i + 1
if keys[i] then
return keys[i], t[keys[i]]
end
end