• Welcome to the Kancolle Wiki!
  • If you have any questions regarding site content, account registration, etc., please visit the KanColle Wiki Discord

Difference between revisions of "Module:Iterator"

From Kancolle Wiki
Jump to navigation Jump to search
Line 29: Line 29:
 
             for _ = i, #collection do
 
             for _ = i, #collection do
 
                 if i >= from and i <= to then
 
                 if i >= from and i <= to then
 +
                    current = collection[i].name
 +
                    i = i + 1
 +
                    return true
 +
                end
 +
                i = i + 1
 +
            end
 +
            current = nil
 +
            return false
 +
        end,
 +
        current = function()
 +
            return current
 +
        end,
 +
    }
 +
end
 +
 +
function Iterator.equipment()
 +
    return Iterator.equipmentById()
 +
end
 +
 +
function Iterator.equipmentByType(context)
 +
    local type = context and context.type and tonumber(context.type)
 +
    local collection = require('Module:Collection/Equipment')
 +
    local i = 1
 +
    local current
 +
    return {
 +
        next = function()
 +
            for _ = i, #collection do
 +
                if collection[i].type == type then
 
                     current = collection[i].name
 
                     current = collection[i].name
 
                     i = i + 1
 
                     i = i + 1

Revision as of 20:00, 6 October 2017

Documentation for this module may be created at Module:Iterator/doc

-- [[Category:Todo]]:
-- more generic interface and compositions (filtering, grouping, mapping, sorting, etc.)
-- prevent clients from infinite loops

local Iterator = {}

function Iterator.array(arr, i, n)
    i = i or 0
    n = n and math.min(#arr, n) or #arr
    function step(n, i)
        if i < n then
            i = i + 1
            return i, arr[i]
        end
    end
    return function()
        return step, n, i
    end
end

function Iterator.equipmentById(context)
    local from = context and context.from and tonumber(context.from) or 1
    local to = context and context.to and tonumber(context.to) or 500
    local collection = require('Module:Collection/Equipment')
    local i = 1
    local current
    return {
        next = function()
            for _ = i, #collection do
                if i >= from and i <= to then
                    current = collection[i].name
                    i = i + 1
                    return true
                end
                i = i + 1
            end
            current = nil
            return false
        end,
        current = function()
            return current
        end,
    }
end

function Iterator.equipment()
    return Iterator.equipmentById()
end

function Iterator.equipmentByType(context)
    local type = context and context.type and tonumber(context.type)
    local collection = require('Module:Collection/Equipment')
    local i = 1
    local current
    return {
        next = function()
            for _ = i, #collection do
                if collection[i].type == type then
                    current = collection[i].name
                    i = i + 1
                    return true
                end
                i = i + 1
            end
            current = nil
            return false
        end,
        current = function()
            return current
        end,
    }
end

--[[
function Iterator.test()
    local iterator = Iterator.equipmentById({ from = "11", to = "20" })
    while iterator.next() do
        mw.log(iterator.current())
    end
end
-- p.test()
]]--

return Iterator