Lua FiveM开发:轮毂模组表按name字段字母排序及重复值处理
实现方案
1. 按name字段字母顺序排序
直接使用Lua原生的table.sort方法对validMods数组排序,排序规则基于name字段的字符串比较:
-- 排序逻辑:name字母顺序更靠前的条目排在前面 table.sort(validMods, function(a, b) return a.name < b.name end)
你示例给出的预期输出顺序为Inferno在前、Deep Five在后,和标准字母顺序(D < I)不符,如果需要自定义排序优先级,修改上述比较函数的逻辑即可。
2. 为重复名称添加变体后缀
排序完成后,用计数器表统计每个名称的出现次数,对重复的名称添加varN后缀:
local nameCount = {} for _, mod in ipairs(validMods) do -- 统计当前名称的出现次数 nameCount[mod.name] = (nameCount[mod.name] or 0) + 1 local count = nameCount[mod.name] -- 第二次及以上出现的名称追加后缀 if count > 1 then mod.name = string.format("%s var%d", mod.name, count) end end
3. 整合到原流程的完整代码
你可以直接替换原有生成validMods的逻辑,修改后的完整代码如下:
local validMods = {} -- 原有生成validMods的逻辑 for i = 1, (GetNumVehicleMods(vehicle, 23) + 1) do local modName = GetLabelText(GetModTextLabel(vehicle, 23, (i-1))) local txt = "" if GetVehicleMod(vehicle, 23) == (i-1) and tonumber(originalWheel) == tonumber(wheeltype) then txt = "Currently Installed" end validMods[i] = { id = (i-1), name = modName, install = txt } end -- 第一步:按名称字段排序 table.sort(validMods, function(a, b) return a.name < b.name end) -- 第二步:处理重复名称追加变体后缀 local nameCount = {} for _, mod in ipairs(validMods) do nameCount[mod.name] = (nameCount[mod.name] or 0) + 1 local count = nameCount[mod.name] if count > 1 then mod.name = string.format("%s var%d", mod.name, count) end end
处理后的最终数据保留了所有原有字段,同时满足排序和重复名称标识的需求,200条以内的条目处理性能完全符合FiveM脚本的运行要求。
内容的提问来源于stack exchange,提问作者Jim Shield
相关产品推荐
相关产品推荐

