- 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"
Jump to navigation
Jump to search
Line 19: | Line 19: | ||
end | end | ||
− | function Iterator.equipmentById(context) | + | function Iterator.equipmentById(context, n) |
− | local from = context and context | + | local fromKey = "from" .. (n and tostring(n) or "") |
− | local to = context and context | + | local toKey = "to" .. (n and tostring(n) or "") |
+ | local from = context and context[fromKey] and tonumber(context[fromKey]) or 1 | ||
+ | local to = context and context[toKey] and tonumber(context[toKey]) or 500 | ||
local collection = require('Module:Collection/Equipment') | local collection = require('Module:Collection/Equipment') | ||
local i = 1 | local i = 1 | ||
Line 44: | Line 46: | ||
end | end | ||
− | function Iterator.equipment() | + | function Iterator.equipment(n) |
− | return Iterator.equipmentById() | + | return Iterator.equipmentById(nil, n) |
end | end | ||
− | function Iterator.equipmentByType(context) | + | function Iterator.equipmentByType(context, n) |
− | local type = context and context | + | local typeKey = "type" .. (n and tostring(n) or "") |
+ | local type = context and context[typeKey] and tonumber(context[typeKey]) | ||
local collection = require('Module:Collection/Equipment') | local collection = require('Module:Collection/Equipment') | ||
local i = 1 | local i = 1 | ||
Line 57: | Line 60: | ||
for _ = i, #collection do | for _ = i, #collection do | ||
if collection[i].type == type then | 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.equipmentByTypeAndIcon(context, n) | ||
+ | local typeKey = "type" .. (n and tostring(n) or "") | ||
+ | local iconKey = "icon" .. (n and tostring(n) or "") | ||
+ | local type = context and context[typeKey] and tonumber(context[typeKey]) | ||
+ | local icon = context and context[iconKey] and tonumber(context[iconKey]) | ||
+ | local collection = require('Module:Collection/Equipment') | ||
+ | local i = 1 | ||
+ | local current | ||
+ | return { | ||
+ | next = function() | ||
+ | for _ = i, #collection do | ||
+ | if collection[i].type == type and collection[i].icon == icon then | ||
current = collection[i].name | current = collection[i].name | ||
i = i + 1 | i = i + 1 |
Revision as of 10:14, 8 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, n)
local fromKey = "from" .. (n and tostring(n) or "")
local toKey = "to" .. (n and tostring(n) or "")
local from = context and context[fromKey] and tonumber(context[fromKey]) or 1
local to = context and context[toKey] and tonumber(context[toKey]) 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(n)
return Iterator.equipmentById(nil, n)
end
function Iterator.equipmentByType(context, n)
local typeKey = "type" .. (n and tostring(n) or "")
local type = context and context[typeKey] and tonumber(context[typeKey])
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.equipmentByTypeAndIcon(context, n)
local typeKey = "type" .. (n and tostring(n) or "")
local iconKey = "icon" .. (n and tostring(n) or "")
local type = context and context[typeKey] and tonumber(context[typeKey])
local icon = context and context[iconKey] and tonumber(context[iconKey])
local collection = require('Module:Collection/Equipment')
local i = 1
local current
return {
next = function()
for _ = i, #collection do
if collection[i].type == type and collection[i].icon == icon 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