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

问题描述 投票:0回答:1

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

    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)
lua lua-table
1个回答
1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.