我如何按所示顺序保留此表?

时间:2019-10-22 15:08:10

标签: lua lua-table

您好,我有一个使用字符串索引的表:

    shirt = {
        ["shirtwhite.png"] = "shirt_white.png",
        ["shirtwhite.png^[multiply:#3f3f3f"] = "shirt_white.png^[multiply:#3f3f3f",
        ["shirtwhite.png^[multiply:#ff0000"] = "shirt_white.png^[multiply:#ff0000",
        ["shirtwhite.png^[multiply:#ff7f00"] = "shirt_white.png^[multiply:#ff7f00",
        ["shirtwhite.png^[multiply:#ffff00"] = "shirt_white.png^[multiply:#ffff00",
        ["shirtwhite.png^[multiply:#00ff00"] = "shirt_white.png^[multiply:#00ff00",
        ["shirtwhite.png^[multiply:#0000ff"] = "shirt_white.png^[multiply:#0000ff",
        ["shirtwhite.png^[multiply:#9f00ff"] = "shirt_white.png^[multiply:#9f00ff",
    },

这些是用于可编辑游戏角色皮肤的T恤纹理(具有不同颜色的颜色值)。

代码中还有更多的theese表,用于字符皮肤的其他部分

在此代码段中加载表格后,如何保持表格的显示顺序? tzable位于文件“ skins.lua”中,代码​​段来自另一个lua文件

character_creator = {}
character_creator.skins = dofile(minetest.get_modpath("character_creator") .. "/skins.lua")

local skins = character_creator.skins
local skins_array = {}

minetest.after(0, function()
    local function associative_to_array(associative)
        local array = {}
        for key in pairs(associative) do
            table.insert(array, key)
        end
        return array
    end

    skins_array = {
        skin  = associative_to_array(skins.skin),
        hair  = associative_to_array(skins.hair),
        eyes  = associative_to_array(skins.eyes),
        shirt = associative_to_array(skins.shirt),
        pants = associative_to_array(skins.pants),
    }
end)

1 个答案:

答案 0 :(得分:2)

在Lua中,只有数组(正整数索引表)具有“顺序”(可以使用ipairs进行迭代);哈希表(如您正在使用的哈希表)是无序的。如果要按特定顺序遍历这样的表,通常会用键创建一个数组,并按所需顺序对其进行排序,然后遍历该数组以从表中提取元素。

如果您想要的话,还有一些组件(例如ordered table)可以跟踪插入并以相同的顺序返回结果。