表格键不正确排序

我有一个表格,看起来像这样

{
   ["slot1"] = {}
   ["slot2"] = {}
   ["slot3"] = {}
   ["slot4"] = {}
   ["slot5"] = {}
   ["slot6"] = {}
}

当我使用循环对键进行排序时,我希望键从 slot1 排到最后一个 slot。目前循环的顺序是不一致的,slot5 先出现等等。有什么最好的方法可以解决这个问题吗?

另外,我没有设计这个表,也不能更改键的外观

点赞
用户107090
用户107090

创建一个新表:

slot = {}
for k,v in pairs(original_table) do
  local i=tonumber(k:match("%d+$"))
  slot[i]=v
end
2021-03-10 15:02:04
用户7396148
用户7396148

Lua 的表键是不确定性的。请参见 什么原因导致Lua表键的顺序不确定

对于你的表,你可以尝试这个:

local t = {
   ["slot1"] = {},
   ["slot2"] = {},
   ["slot3"] = {},
   ["slot4"] = {},
   ["slot5"] = {},
   ["slot6"] = {}
}

local slotNumber = 1
while(t['slot' .. slotNumber]) do
   slot = t['slot' .. slotNumber]
   -- do stuff with slot

   slotNumber = slotNumber + 1
end

这种方法无法处理表跳过一个槽号的情况。

2021-03-10 15:06:32
用户4515989
用户4515989

你可以编写一个简单的自定义迭代器:

local tbl = {
   ["slot1"] = {},
   ["slot2"] = {},
   ["slot3"] = {},
   ["slot4"] = {},
   ["slot5"] = {},
   ["slot6"] = {}
}

function slots(tbl)
    local i = 0
    return function()
        i = i + 1
        if tbl["slot" .. i] ~= nil then
            return i, tbl["slot" .. i]
        end
    end
end

for i, element in slots(tbl) do
    print(i, element)
end

输出:

1   table: 0xd575f0
2   table: 0xd57720
3   table: 0xd57760
4   table: 0xd5aa40
5   table: 0xd5aa80
6   table: 0xd5aac0
2021-03-10 15:12:11