You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按ID对Lua的ITEMSCRAPESTATS表进行排序?

Lua中按ID排序ITEMSCRAPESTATS表的解决方案

问题根源

Lua的哈希表(即使用非连续整数键或字符串键的表)不维护键的存储顺序,你当前的ITEMSCRAPESTATS是用物品ID作为键的哈希表,Lua会根据内部哈希算法存储这些键,所以你看到的表结构顺序不是按键排序的,也无法直接对哈希表本身进行排序。

解决方案

方案1:维护有序键数组,按需遍历

不需要修改原有的ITEMSCRAPESTATS结构,只需要额外维护一个存储物品ID的数组,对数组排序后,按数组顺序访问哈希表的数据即可实现有序输出或处理:

-- 获取排序后的物品ID数组(升序)
function getSortedItemIDs()
    local ids = {}
    -- 收集所有物品ID
    for id in pairs(ITEMSCRAPESTATS) do
        table.insert(ids, id)
    end
    -- 对ID数组升序排序
    table.sort(ids)
    return ids
end

-- 示例:按ID升序遍历并输出所有物品数据
local sortedIDs = getSortedItemIDs()
for _, id in ipairs(sortedIDs) do
    local itemStats = ITEMSCRAPESTATS[id]
    print("=== 物品ID: " .. id .. " ===")
    for _, line in ipairs(itemStats) do
        print(line)
    end
end

方案2:修改数据结构为有序数组

如果需要从存储阶段就保证顺序,可以将原哈希表改为数组结构,每个元素包含物品ID和对应的统计数据,直接对数组排序:

修改后的ess函数:

-- 初始化数组形式的存储表(替代原哈希表)
if not ITEMSCRAPESTATS_ARRAY then
    ITEMSCRAPESTATS_ARRAY = {}
end

function ess(x)
    local itemData = {id = x, stats = {}}
    ES:SetHyperlink("item:"..x..":0:0:0:0:0:0:0")

    if _G["ESTooltipTextLeft2"]:GetText() then
        for i=1, ES:NumLines() do
            local text = _G["ESTooltipTextLeft"..i]:GetText()
            table.insert(itemData.stats, text)
        end
        print("Scraping Stats for Item Number: "..x)
    else
        table.insert(itemData.stats, "No Stats for Item Number")
        print("No Stats for Item Number: "..x)
    end

    -- 检查是否已存在该ID,避免重复添加,若存在则更新数据
    local exists = false
    for _, entry in ipairs(ITEMSCRAPESTATS_ARRAY) do
        if entry.id == x then
            entry.stats = itemData.stats
            exists = true
            break
        end
    end
    if not exists then
        table.insert(ITEMSCRAPESTATS_ARRAY, itemData)
    end

    -- 对数组按ID升序排序
    table.sort(ITEMSCRAPESTATS_ARRAY, function(a, b)
        return a.id < b.id
    end)
end

此时ITEMSCRAPESTATS_ARRAY就是按物品ID升序排列的数组,直接用ipairs遍历即可得到有序结果。


内容的提问来源于stack exchange,提问作者Josh Stevens

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 04:45:02