如何保持表格的顺序不变?

嗨,我有一个使用字符串索引的表格:

    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恤纹理(具有不同颜色的颜色值)。

代码中还有更多的这些表,用于角色皮肤的其他部分。

如何在加载到此代码片段时保持表格的显示顺序? 表格在一个名为"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)
点赞
用户1442917
用户1442917

在 Lua 中,只有数组(正整数索引表)具有“顺序”(可以使用 ipairs 迭代)。哈希表(就像你正在使用的那个表)是无序的。如果您想按特定顺序迭代这样的表,通常会创建一个包含键的数组,按您想要的顺序对它们进行排序,然后从表中提取元素迭代该数组。

还有一些组件(例如有序表),如果您需要,可以跟踪插入并按相同顺序返回结果。

2019-10-22 16:34:02