local tbl = {} local tbl_queue = {} for i = 1, 10 do local k = {id = i} tbl_queue[#tbl_queue + 1] = k tbl[k] = i end for _, v in ipairs(tbl_queue) do print(v.id, tbl[v]) end 大概意思就是这样。 如果你坚持想用 pairs 的话,可以重写一下这函数,比如: local rawpairs = pairs function pairs(tb, func) if func == nil and type(tb._queue) == "table" then return ipairs(tb._queue) end return rawpairs(tb, func) end local tbl = {_queue = {}} function tbl.set(key, val) -- 之后为该表赋值时均使用此函数 if tbl[key] and val == nil then for i = 1, #tbl._queue do if tbl._queue[i] == key then table.remove(tbl._queue, i) end end else tbl._queue[#tbl._queue + 1] = key end tbl[key] = val end -- 上面这种数组表结构完全可以扩展功能后再给写个构造函数,这里先简单写一下 for i = 1, 10 do local k = {id = i} tbl.set(k, i) end for _, v in pairs(tbl) do -- 等价于 for _, v in ipairs(tbl._queue) do print(v.id, tbl[v]) end