×
新規記事を作成
ここにページのタイトルを記入:
We currently have 2 articles on 政治ボールwiki 日本語版. Type your article name above or click on one of the titles below and start writing!



    政治ボールwiki 日本語版

    このモジュールについての説明文ページを モジュール:Table/doc に作成できます

    local p = {}
    
    -- A number of functions, most of them imported from [[wikt:Module:table]], a
    -- spinoff of [[Module:TableTools]].
    
    local libraryUtil = require('libraryUtil')
    local checkType = libraryUtil.checkType
    local checkTypeMulti = libraryUtil.checkTypeMulti
    
    local function _check(funcName, expectType)
    	if type(expectType) == "string" then
    		return function(argIndex, arg, nilOk)
    			checkType(funcName, argIndex, arg, expectType, nilOk)
    		end
    	else
    		return function(argIndex, arg, expectType, nilOk)
    			if type(expectType) == "table" then
    				checkTypeMulti(funcName, argIndex, arg, expectType, nilOk)
    			else
    				checkType(funcName, argIndex, arg, expectType, nilOk)
    			end
    		end
    	end
    end
    
    local function defaultKeySort(item1, item2)
    	-- "number" < "string", so numbers will be sorted before strings.
    	local type1, type2 = type(item1), type(item2)
    	if type1 ~= type2 then
    		return type1 < type2
    	else -- This will fail with table, boolean, function.
    		return item1 < item2
    	end
    end
    
    --[[
    	Returns a list of the keys in a table, sorted using either a default
    	comparison function or a custom keySort function.
    ]]
    function p.keysToList(t, keySort, checked)
    	if not checked then
    		local check = _check('keysToList')
    		check(1, t, 'table')
    		check(2, keySort, { 'function', 'boolean', 'nil' })
    	end
    	
    	local list = {}
    	local index = 1
    	for key, value in pairs(t) do
    		list[index] = key
    		index = index + 1
    	end
    	
    	if keySort ~= false then
    		keySort = type(keySort) == 'function' and keySort or defaultKeySort
    		
    		table.sort(list, keySort)
    	end
    	
    	return list
    end
    
    --[[
    	Iterates through a table, with the keys sorted using the keysToList function.
    	If there are only numerical keys, sparseIpairs is probably more efficient.
    ]]
    function p.sortedPairs(t, keySort)
    	local check = _check('keysToList')
    	check(1, t, 'table')
    	check(2, keySort, 'function', true)
    	
    	local list = p.keysToList(t, keySort, true)
    	
    	local i = 0
    	return function()
    		i = i + 1
    		local key = list[i]
    		if key ~= nil then
    			return key, t[key]
    		else
    			return nil, nil
    		end
    	end
    end
    
    --[[
    	Returns true if all keys in the table are consecutive integers starting at 1.
    --]]
    function p.isArray(t)
    	checkType("isArray", 1, t, "table")
    	
    	local i = 0
    	for k, v in pairs(t) do
    		i = i + 1
    		if t[i] == nil then
    			return false
    		end
    	end
    	return true
    end
    
    -- { "a", "b", "c" } -> { a = 1, b = 2, c = 3 }
    function p.invert(array)
    	checkType("invert", 1, array, "table")
    	
    	local map = {}
    	for i, v in ipairs(array) do
    		map[v] = i
    	end
    	
    	return map
    end
    
    --[[
    	{ "a", "b", "c" } -> { ["a"] = true, ["b"] = true, ["c"] = true }
    --]]
    function p.listToSet(t)
    	checkType("listToSet", 1, t, "table")
    	
    	local set = {}
    	for _, item in ipairs(t) do
    		set[item] = true
    	end
    	
    	return set
    end
    
    --[[
    	Recursive deep copy function
    ]]
    function p.deepCopy(orig, noMetatable)
        local orig_type = type(orig)
        local copy
        if orig_type == 'table' then
            copy = {}
            for orig_key, orig_value in pairs(orig) do
                copy[p.deepCopy(orig_key, noMetatable)] = p.deepCopy(orig_value, noMetatable)
            end
            if not noMetatable then
            	setmetatable(copy, p.deepCopy(getmetatable(orig)))
            end
        else -- number, string, boolean, etc
            copy = orig
        end
        return copy
    end
    
    
    --[[
    	Concatenates all values in the table that are indexed by a number, in order.
    	sparseConcat{ a, nil, c, d }  =>  "acd"
    	sparseConcat{ nil, b, c, d }  =>  "bcd"
    ]]
    function p.sparseConcat(t, sep, i, j)
    	local list = {}
    	
    	local list_i = 0
    	for _, v in require("Module:TableTools").sparseIpairs(t) do
    		list_i = list_i + 1
    		list[list_i] = v
    	end
    	
    	return table.concat(list, sep, i, j)
    end
    
    --[[
    -- This returns the length of a table, or the first integer key n counting from
    -- 1 such that t[n + 1] is nil. It is similar to the operator #, but may return
    -- a different value when there are gaps in the array portion of the table.
    -- Intended to be used on data loaded with mw.loadData. For other tables, use #.
    --]]
    function p.length(t)
    	local i = 0
    	repeat
    		i = i + 1
    	until t[i] == nil
    	return i - 1
    end
    
    function p.inArray(arr, valueToFind)
    	checkType("inArray", 1, arr, "table")
    	
    	-- if valueToFind is nil, error?
    	
    	for _, v in ipairs(arr) do
    		if v == valueToFind then
    			return true
    		end
    	end
    	
    	return false
    end
    
    return p