Lua按顺序遍历表元素问题:遍历自定义月份表输出顺序不符求解决
解决方案
方案1:改用数组存储月份(简单场景推荐)
Lua中字符串为键的表属于哈希表,pairs()遍历顺序由哈希存储规则决定,和定义顺序无关。如果不需要键值映射,直接把月份按顺序存成数组,用ipairs()遍历就能保证顺序:
local Month = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"} p.main = function() local text = "" for i, k in ipairs(Month) do text = text .. " " .. k end return text:sub(2) -- 移除开头多余的空格 end
方案2:保留原键值表,先排序键再遍历
如果必须保留原有的键值映射结构,可以先收集所有月份名称,再根据对应数值排序后遍历:
local Month = { Jan = 1, Feb = 2, Mar = 3, Apr = 4, May = 5, Jun = 6, Jul = 7, Aug = 8, Sep = 9, Oct = 10, Nov = 11, Dec = 12 } p.main = function() local text = "" -- 收集所有月份键到数组 local keys = {} for k in pairs(Month) do table.insert(keys, k) end -- 按月份对应的数值从小到大排序 table.sort(keys, function(a, b) return Month[a] < Month[b] end) -- 遍历排序后的键拼接字符串 for _, k in ipairs(keys) do text = text .. " " .. k end return text:sub(2) -- 移除开头多余的空格 end
关键说明
Lua的pairs()不会保证哈希表的遍历顺序和定义顺序一致,必须通过数组存储或手动排序键的方式,才能实现按预期顺序输出。
内容的提问来源于stack exchange,提问作者Niles
相关产品推荐
相关产品推荐

